diff options
397 files changed, 6374 insertions, 2967 deletions
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index 0ba1614ab6c5..4e426720ab03 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -16,6 +16,7 @@ package android.app; +import static android.Manifest.permission.CONTROL_KEYGUARD; import static android.Manifest.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS; import static android.Manifest.permission.START_TASKS_FROM_RECENTS; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; @@ -362,9 +363,8 @@ public class ActivityOptions extends ComponentOptions { private static final String KEY_LAUNCH_INTO_PIP_PARAMS = "android.activity.launchIntoPipParams"; - /** See {@link #setDismissKeyguardIfInsecure()}. */ - private static final String KEY_DISMISS_KEYGUARD_IF_INSECURE = - "android.activity.dismissKeyguardIfInsecure"; + /** See {@link #setDismissKeyguard()}. */ + private static final String KEY_DISMISS_KEYGUARD = "android.activity.dismissKeyguard"; private static final String KEY_IGNORE_PENDING_INTENT_CREATOR_FOREGROUND_STATE = "android.activity.ignorePendingIntentCreatorForegroundState"; @@ -465,7 +465,7 @@ public class ActivityOptions extends ComponentOptions { private boolean mLaunchedFromBubble; private boolean mTransientLaunch; private PictureInPictureParams mLaunchIntoPipParams; - private boolean mDismissKeyguardIfInsecure; + private boolean mDismissKeyguard; private boolean mIgnorePendingIntentCreatorForegroundState; /** @@ -1270,7 +1270,7 @@ public class ActivityOptions extends ComponentOptions { mLaunchIntoPipParams = opts.getParcelable(KEY_LAUNCH_INTO_PIP_PARAMS); mIsEligibleForLegacyPermissionPrompt = opts.getBoolean(KEY_LEGACY_PERMISSION_PROMPT_ELIGIBLE); - mDismissKeyguardIfInsecure = opts.getBoolean(KEY_DISMISS_KEYGUARD_IF_INSECURE); + mDismissKeyguard = opts.getBoolean(KEY_DISMISS_KEYGUARD); mIgnorePendingIntentCreatorForegroundState = opts.getBoolean( KEY_IGNORE_PENDING_INTENT_CREATOR_FOREGROUND_STATE); } @@ -1874,24 +1874,24 @@ public class ActivityOptions extends ComponentOptions { } /** - * Sets whether the insecure keyguard should go away when this activity launches. In case the - * keyguard is secure, this option will be ignored. + * Sets whether the keyguard should go away when this activity launches. * * @see Activity#setShowWhenLocked(boolean) * @see android.R.attr#showWhenLocked * @hide */ - public void setDismissKeyguardIfInsecure() { - mDismissKeyguardIfInsecure = true; + @RequiresPermission(CONTROL_KEYGUARD) + public void setDismissKeyguard() { + mDismissKeyguard = true; } /** - * @see #setDismissKeyguardIfInsecure() + * @see #setDismissKeyguard() * @return whether the insecure keyguard should go away when the activity launches. * @hide */ - public boolean getDismissKeyguardIfInsecure() { - return mDismissKeyguardIfInsecure; + public boolean getDismissKeyguard() { + return mDismissKeyguard; } /** @@ -2172,8 +2172,8 @@ public class ActivityOptions extends ComponentOptions { b.putBoolean(KEY_LEGACY_PERMISSION_PROMPT_ELIGIBLE, mIsEligibleForLegacyPermissionPrompt); } - if (mDismissKeyguardIfInsecure) { - b.putBoolean(KEY_DISMISS_KEYGUARD_IF_INSECURE, mDismissKeyguardIfInsecure); + if (mDismissKeyguard) { + b.putBoolean(KEY_DISMISS_KEYGUARD, mDismissKeyguard); } if (mIgnorePendingIntentCreatorForegroundState) { b.putBoolean(KEY_IGNORE_PENDING_INTENT_CREATOR_FOREGROUND_STATE, diff --git a/core/java/android/hardware/camera2/CameraCaptureSession.java b/core/java/android/hardware/camera2/CameraCaptureSession.java index 691690c09e0e..5b1973ad2dd4 100644 --- a/core/java/android/hardware/camera2/CameraCaptureSession.java +++ b/core/java/android/hardware/camera2/CameraCaptureSession.java @@ -1234,6 +1234,42 @@ public abstract class CameraCaptureSession implements AutoCloseable { } /** + * This method is called when the camera device has started reading out the output + * image for the request, at the beginning of the sensor image readout. + * + * <p>For a capture request, this callback is invoked right after + * {@link #onCaptureStarted}. Unlike {@link #onCaptureStarted}, instead of passing + * a timestamp of start of exposure, this callback passes a timestamp of start of + * camera data readout. This is useful because for a camera running at fixed frame + * rate, the start of readout is at fixed interval, which is not necessarily true for + * the start of exposure, particularly when autoexposure is changing exposure duration + * between frames.</p> + * + * <p>This timestamp may not match {@link CaptureResult#SENSOR_TIMESTAMP the result + * timestamp field}. It will, however, match the timestamp of buffers sent to the + * output surfaces with {@link OutputConfiguration#TIMESTAMP_BASE_READOUT_SENSOR} + * timestamp base.</p> + * + * <p>This callback will be called only if {@link + * CameraCharacteristics#SENSOR_READOUT_TIMESTAMP} is + * {@link CameraMetadata#SENSOR_READOUT_TIMESTAMP_HARDWARE}, and it's called + * right after {@link #onCaptureStarted}.</p> + * + * @param session the session returned by {@link CameraDevice#createCaptureSession} + * @param request the request for the readout that just began + * @param timestamp the timestamp at start of readout for a regular request, or + * the timestamp at the input image's start of readout for a + * reprocess request, in nanoseconds. + * @param frameNumber the frame number for this capture + * + * @hide + */ + public void onReadoutStarted(@NonNull CameraCaptureSession session, + @NonNull CaptureRequest request, long timestamp, long frameNumber) { + // default empty implementation + } + + /** * This method is called when some results from an image capture are * available. * diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index 98a8cbd8a73c..861a8502c44d 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -1326,6 +1326,10 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * {@link android.hardware.camera2.CameraManager#turnOnTorchWithStrengthLevel }. * If this value is equal to 1, flashlight brightness control is not supported. * The value for this key will be null for devices with no flash unit.</p> + * <p>The maximum value is guaranteed to be safe to use for an indefinite duration in + * terms of device flashlight lifespan, but may be too bright for comfort for many + * use cases. Use the default torch brightness value to avoid problems with an + * over-bright flashlight.</p> * <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p> */ @PublicKey @@ -4415,6 +4419,40 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri new Key<android.graphics.Rect[]>("android.sensor.opticalBlackRegions", android.graphics.Rect[].class); /** + * <p>Whether or not the camera device supports readout timestamp and + * onReadoutStarted callback.</p> + * <p>If this tag is HARDWARE, the camera device calls onReadoutStarted in addition to the + * onCaptureStarted callback for each capture. The timestamp passed into the callback + * is the start of camera image readout rather than the start of the exposure. In + * addition, the application can configure an + * {@link android.hardware.camera2.params.OutputConfiguration } with + * TIMESTAMP_BASE_READOUT_SENSOR timestamp base, in which case, the timestamp of the + * output surface matches the timestamp from the corresponding onReadoutStarted callback.</p> + * <p>The readout timestamp is beneficial for video recording, because the encoder favors + * uniform timestamps, and the readout timestamps better reflect the cadence camera sensors + * output data.</p> + * <p>If this tag is HARDWARE, the camera device produces the start-of-exposure and + * start-of-readout together. As a result, the onReadoutStarted is called right after + * onCaptureStarted. The difference in start-of-readout and start-of-exposure is the sensor + * exposure time, plus certain constant offset. The offset is usually due to camera sensor + * level crop, and it remains constant for a given camera sensor mode.</p> + * <p><b>Possible values:</b></p> + * <ul> + * <li>{@link #SENSOR_READOUT_TIMESTAMP_NOT_SUPPORTED NOT_SUPPORTED}</li> + * <li>{@link #SENSOR_READOUT_TIMESTAMP_HARDWARE HARDWARE}</li> + * </ul> + * + * <p>This key is available on all devices.</p> + * @see #SENSOR_READOUT_TIMESTAMP_NOT_SUPPORTED + * @see #SENSOR_READOUT_TIMESTAMP_HARDWARE + * @hide + */ + @PublicKey + @NonNull + public static final Key<Integer> SENSOR_READOUT_TIMESTAMP = + new Key<Integer>("android.sensor.readoutTimestamp", int.class); + + /** * <p>List of lens shading modes for {@link CaptureRequest#SHADING_MODE android.shading.mode} that are supported by this camera device.</p> * <p>This list contains lens shading modes that can be set for the camera device. * Camera devices that support the MANUAL_POST_PROCESSING capability will always diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index eb8c73aced39..c67a560b5885 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -1658,6 +1658,28 @@ public abstract class CameraMetadata<TKey> { public static final int SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN = 24; // + // Enumeration values for CameraCharacteristics#SENSOR_READOUT_TIMESTAMP + // + + /** + * <p>This camera device doesn't support readout timestamp and onReadoutStarted + * callback.</p> + * @see CameraCharacteristics#SENSOR_READOUT_TIMESTAMP + * @hide + */ + public static final int SENSOR_READOUT_TIMESTAMP_NOT_SUPPORTED = 0; + + /** + * <p>This camera device supports the onReadoutStarted callback as well as outputting + * readout timestamp for streams with TIMESTAMP_BASE_READOUT_SENSOR timestamp base. The + * readout timestamp is generated by the camera hardware and it has the same accuracy + * and timing characteristics of the start-of-exposure time.</p> + * @see CameraCharacteristics#SENSOR_READOUT_TIMESTAMP + * @hide + */ + public static final int SENSOR_READOUT_TIMESTAMP_HARDWARE = 1; + + // // Enumeration values for CameraCharacteristics#LED_AVAILABLE_LEDS // diff --git a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java index 9a9163c724ff..b9eba9c1d541 100644 --- a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java @@ -657,6 +657,21 @@ public class CameraCaptureSessionImpl extends CameraCaptureSession } @Override + public void onReadoutStarted(CameraDevice camera, + CaptureRequest request, long timestamp, long frameNumber) { + if ((callback != null) && (executor != null)) { + final long ident = Binder.clearCallingIdentity(); + try { + executor.execute(() -> callback.onReadoutStarted( + CameraCaptureSessionImpl.this, request, timestamp, + frameNumber)); + } finally { + Binder.restoreCallingIdentity(ident); + } + } + } + + @Override public void onCapturePartial(CameraDevice camera, CaptureRequest request, android.hardware.camera2.CaptureResult result) { if ((callback != null) && (executor != null)) { diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java index 3cb0c93d8409..a6c79b3a289f 100644 --- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java @@ -2025,12 +2025,16 @@ public class CameraDeviceImpl extends CameraDevice resultExtras.getLastCompletedReprocessFrameNumber(); final long lastCompletedZslFrameNumber = resultExtras.getLastCompletedZslFrameNumber(); + final boolean hasReadoutTimestamp = resultExtras.hasReadoutTimestamp(); + final long readoutTimestamp = resultExtras.getReadoutTimestamp(); if (DEBUG) { Log.d(TAG, "Capture started for id " + requestId + " frame number " + frameNumber + ": completedRegularFrameNumber " + lastCompletedRegularFrameNumber + ", completedReprocessFrameNUmber " + lastCompletedReprocessFrameNumber - + ", completedZslFrameNumber " + lastCompletedZslFrameNumber); + + ", completedZslFrameNumber " + lastCompletedZslFrameNumber + + ", hasReadoutTimestamp " + hasReadoutTimestamp + + (hasReadoutTimestamp ? ", readoutTimestamp " + readoutTimestamp : "")) ; } final CaptureCallbackHolder holder; @@ -2082,14 +2086,26 @@ public class CameraDeviceImpl extends CameraDevice CameraDeviceImpl.this, holder.getRequest(i), timestamp - (subsequenceId - i) * - NANO_PER_SECOND/fpsRange.getUpper(), + NANO_PER_SECOND / fpsRange.getUpper(), frameNumber - (subsequenceId - i)); + if (hasReadoutTimestamp) { + holder.getCallback().onReadoutStarted( + CameraDeviceImpl.this, + holder.getRequest(i), + readoutTimestamp - (subsequenceId - i) * + NANO_PER_SECOND / fpsRange.getUpper(), + frameNumber - (subsequenceId - i)); + } } } else { holder.getCallback().onCaptureStarted( - CameraDeviceImpl.this, - holder.getRequest(resultExtras.getSubsequenceId()), + CameraDeviceImpl.this, request, timestamp, frameNumber); + if (hasReadoutTimestamp) { + holder.getCallback().onReadoutStarted( + CameraDeviceImpl.this, request, + readoutTimestamp, frameNumber); + } } } } diff --git a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java index 4d0ba63d7759..41822e77f953 100644 --- a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java @@ -1693,8 +1693,10 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { ((i != idx) || notifyCurrentIndex)) { TotalCaptureResult result = previewMap.valueAt(i).second; Long timestamp = result.get(CaptureResult.SENSOR_TIMESTAMP); - mCaptureResultHandler.onCaptureCompleted(timestamp, - initializeFilteredResults(result)); + if (mCaptureResultHandler != null) { + mCaptureResultHandler.onCaptureCompleted(timestamp, + initializeFilteredResults(result)); + } Log.w(TAG, "Preview frame drop with timestamp: " + previewMap.keyAt(i)); final long ident = Binder.clearCallingIdentity(); @@ -1739,6 +1741,20 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { // abruptly. Log.w(TAG, "Output surface likely abandoned, dropping buffer!"); img.close(); + } catch (RuntimeException e) { + // NOTE: This is intended to catch RuntimeException from ImageReader.detachImage + // ImageReader.detachImage is not supposed to throw RuntimeExceptions but the + // bug went unchecked for a few years and now its behavior cannot be changed + // without breaking backwards compatibility. + + if (!e.getClass().equals(RuntimeException.class)) { + // re-throw any exceptions that aren't base RuntimeException since they are + // coming from elsewhere, and we shouldn't silently drop those. + throw e; + } + + Log.w(TAG, "Output surface likely abandoned, dropping buffer!"); + img.close(); } } } @@ -1773,9 +1789,23 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { } try { reader.detachImage(img); - } catch (Exception e) { - Log.e(TAG, - "Failed to detach image!"); + } catch (IllegalStateException e) { + Log.e(TAG, "Failed to detach image!"); + img.close(); + return; + } catch (RuntimeException e) { + // NOTE: This is intended to catch RuntimeException from ImageReader.detachImage + // ImageReader.detachImage is not supposed to throw RuntimeExceptions but the + // bug went unchecked for a few years and now its behavior cannot be changed + // without breaking backwards compatibility. + + if (!e.getClass().equals(RuntimeException.class)) { + // re-throw any exceptions that aren't base RuntimeException since they are + // coming from elsewhere, and we shouldn't silently drop those. + throw e; + } + + Log.e(TAG, "Failed to detach image!"); img.close(); return; } diff --git a/core/java/android/hardware/camera2/impl/CaptureCallback.java b/core/java/android/hardware/camera2/impl/CaptureCallback.java index 6defe63b1766..b064e6a1f975 100644 --- a/core/java/android/hardware/camera2/impl/CaptureCallback.java +++ b/core/java/android/hardware/camera2/impl/CaptureCallback.java @@ -66,6 +66,13 @@ public abstract class CaptureCallback { CaptureRequest request, long timestamp, long frameNumber); /** + * This method is called when the camera device has started reading out the output + * image for the request, at the beginning of the sensor image readout. + */ + public abstract void onReadoutStarted(CameraDevice camera, + CaptureRequest request, long timestamp, long frameNumber); + + /** * This method is called when some results from an image capture are * available. * diff --git a/core/java/android/hardware/camera2/impl/CaptureResultExtras.java b/core/java/android/hardware/camera2/impl/CaptureResultExtras.java index 5d9da73fd5c0..8bf94986a490 100644 --- a/core/java/android/hardware/camera2/impl/CaptureResultExtras.java +++ b/core/java/android/hardware/camera2/impl/CaptureResultExtras.java @@ -33,6 +33,8 @@ public class CaptureResultExtras implements Parcelable { private long lastCompletedRegularFrameNumber; private long lastCompletedReprocessFrameNumber; private long lastCompletedZslFrameNumber; + private boolean hasReadoutTimestamp; + private long readoutTimestamp; public static final @android.annotation.NonNull Parcelable.Creator<CaptureResultExtras> CREATOR = new Parcelable.Creator<CaptureResultExtras>() { @@ -56,7 +58,8 @@ public class CaptureResultExtras implements Parcelable { int partialResultCount, int errorStreamId, String errorPhysicalCameraId, long lastCompletedRegularFrameNumber, long lastCompletedReprocessFrameNumber, - long lastCompletedZslFrameNumber) { + long lastCompletedZslFrameNumber, boolean hasReadoutTimestamp, + long readoutTimestamp) { this.requestId = requestId; this.subsequenceId = subsequenceId; this.afTriggerId = afTriggerId; @@ -68,6 +71,8 @@ public class CaptureResultExtras implements Parcelable { this.lastCompletedRegularFrameNumber = lastCompletedRegularFrameNumber; this.lastCompletedReprocessFrameNumber = lastCompletedReprocessFrameNumber; this.lastCompletedZslFrameNumber = lastCompletedZslFrameNumber; + this.hasReadoutTimestamp = hasReadoutTimestamp; + this.readoutTimestamp = readoutTimestamp; } @Override @@ -93,6 +98,10 @@ public class CaptureResultExtras implements Parcelable { dest.writeLong(lastCompletedRegularFrameNumber); dest.writeLong(lastCompletedReprocessFrameNumber); dest.writeLong(lastCompletedZslFrameNumber); + dest.writeBoolean(hasReadoutTimestamp); + if (hasReadoutTimestamp) { + dest.writeLong(readoutTimestamp); + } } public void readFromParcel(Parcel in) { @@ -110,6 +119,10 @@ public class CaptureResultExtras implements Parcelable { lastCompletedRegularFrameNumber = in.readLong(); lastCompletedReprocessFrameNumber = in.readLong(); lastCompletedZslFrameNumber = in.readLong(); + hasReadoutTimestamp = in.readBoolean(); + if (hasReadoutTimestamp) { + readoutTimestamp = in.readLong(); + } } public String getErrorPhysicalCameraId() { @@ -155,4 +168,12 @@ public class CaptureResultExtras implements Parcelable { public long getLastCompletedZslFrameNumber() { return lastCompletedZslFrameNumber; } + + public boolean hasReadoutTimestamp() { + return hasReadoutTimestamp; + } + + public long getReadoutTimestamp() { + return readoutTimestamp; + } } diff --git a/core/java/android/hardware/camera2/marshal/impl/MarshalQueryableArray.java b/core/java/android/hardware/camera2/marshal/impl/MarshalQueryableArray.java index 6cf5d60acec8..598170dfcb25 100644 --- a/core/java/android/hardware/camera2/marshal/impl/MarshalQueryableArray.java +++ b/core/java/android/hardware/camera2/marshal/impl/MarshalQueryableArray.java @@ -26,6 +26,10 @@ import static android.hardware.camera2.marshal.MarshalHelpers.getPrimitiveTypeCl import java.lang.reflect.Array; import java.nio.ByteBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; import java.util.ArrayList; /** @@ -45,46 +49,49 @@ public class MarshalQueryableArray<T> implements MarshalQueryable<T> { private static final boolean DEBUG = false; private static interface PrimitiveArrayFiller { - public void fillPosition(Object arr, int index, ByteBuffer buffer); + public void fillArray(Object arr, int size, ByteBuffer buffer); static PrimitiveArrayFiller getPrimitiveArrayFiller(Class<?> componentType) { if (componentType == int.class) { return new PrimitiveArrayFiller() { @Override - public void fillPosition(Object arr, int index, ByteBuffer buffer) { - int i = buffer.getInt(); - Array.setInt(arr, index, i); + public void fillArray(Object arr, int size, ByteBuffer buffer) { + IntBuffer ib = buffer.asIntBuffer().get(int[].class.cast(arr), 0, size); + // Update buffer position since the IntBuffer has independent position. + buffer.position(buffer.position() + ib.position() * Integer.BYTES); } }; } else if (componentType == float.class) { return new PrimitiveArrayFiller() { @Override - public void fillPosition(Object arr, int index, ByteBuffer buffer) { - float i = buffer.getFloat(); - Array.setFloat(arr, index, i); + public void fillArray(Object arr, int size, ByteBuffer buffer) { + FloatBuffer fb = + buffer.asFloatBuffer().get(float[].class.cast(arr), 0, size); + buffer.position(buffer.position() + fb.position() * Float.BYTES); } }; } else if (componentType == long.class) { return new PrimitiveArrayFiller() { @Override - public void fillPosition(Object arr, int index, ByteBuffer buffer) { - long i = buffer.getLong(); - Array.setLong(arr, index, i); + public void fillArray(Object arr, int size, ByteBuffer buffer) { + LongBuffer lb = + buffer.asLongBuffer().get(long[].class.cast(arr), 0, size); + buffer.position(buffer.position() + lb.position() * Long.BYTES); } }; } else if (componentType == double.class) { return new PrimitiveArrayFiller() { @Override - public void fillPosition(Object arr, int index, ByteBuffer buffer) { - double i = buffer.getDouble(); - Array.setDouble(arr, index, i); + public void fillArray(Object arr, int size, ByteBuffer buffer) { + DoubleBuffer db = + buffer.asDoubleBuffer().get(double[].class.cast(arr), 0, size); + buffer.position(buffer.position() + db.position() * Double.BYTES); } }; } else if (componentType == byte.class) { return new PrimitiveArrayFiller() { @Override - public void fillPosition(Object arr, int index, ByteBuffer buffer) { - byte i = buffer.get(); - Array.setByte(arr, index, i); + public void fillArray(Object arr, int size, ByteBuffer buffer) { + buffer.get(byte[].class.cast(arr), 0, size); } }; } @@ -93,13 +100,6 @@ public class MarshalQueryableArray<T> implements MarshalQueryable<T> { } }; - static void unmarshalPrimitiveArray(Object arr, int size, ByteBuffer buffer, - PrimitiveArrayFiller filler) { - for (int i = 0; i < size; i++) { - filler.fillPosition(arr, i, buffer); - } - } - private class MarshalerArray extends Marshaler<T> { private final Class<T> mClass; private final Marshaler<?> mComponentMarshaler; @@ -150,8 +150,8 @@ public class MarshalQueryableArray<T> implements MarshalQueryable<T> { array = Array.newInstance(mComponentClass, arraySize); if (isUnwrappedPrimitiveClass(mComponentClass) && mComponentClass == getPrimitiveTypeClass(mNativeType)) { - unmarshalPrimitiveArray(array, arraySize, buffer, - PrimitiveArrayFiller.getPrimitiveArrayFiller(mComponentClass)); + PrimitiveArrayFiller.getPrimitiveArrayFiller(mComponentClass).fillArray(array, + arraySize, buffer); } else { for (int i = 0; i < arraySize; ++i) { Object elem = mComponentMarshaler.unmarshal(buffer); diff --git a/core/java/android/hardware/camera2/params/OutputConfiguration.java b/core/java/android/hardware/camera2/params/OutputConfiguration.java index 4a2517763aae..9e8703779863 100644 --- a/core/java/android/hardware/camera2/params/OutputConfiguration.java +++ b/core/java/android/hardware/camera2/params/OutputConfiguration.java @@ -245,6 +245,26 @@ public final class OutputConfiguration implements Parcelable { */ public static final int TIMESTAMP_BASE_CHOREOGRAPHER_SYNCED = 4; + /** + * Timestamp is the start of readout in the same time domain as TIMESTAMP_BASE_SENSOR. + * + * <p>The start of the camera sensor readout after exposure. For a rolling shutter camera + * sensor, the timestamp is typically equal to the start of exposure time + + * exposure time + certain fixed offset. The fixed offset could be due to camera sensor + * level crop. The benefit of using readout time is that when camera runs in a fixed + * frame rate, the timestamp intervals between frames are constant.</p> + * + * <p>This timestamp is in the same time domain as in TIMESTAMP_BASE_SENSOR, with the exception + * that one is start of exposure, and the other is start of readout.</p> + * + * <p>This timestamp base is supported only if {@link + * CameraCharacteristics#SENSOR_READOUT_TIMESTAMP} is + * {@link CameraMetadata#SENSOR_READOUT_TIMESTAMP_HARDWARE}.</p> + * + * @hide + */ + public static final int TIMESTAMP_BASE_READOUT_SENSOR = 5; + /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = {"TIMESTAMP_BASE_"}, value = @@ -252,7 +272,8 @@ public final class OutputConfiguration implements Parcelable { TIMESTAMP_BASE_SENSOR, TIMESTAMP_BASE_MONOTONIC, TIMESTAMP_BASE_REALTIME, - TIMESTAMP_BASE_CHOREOGRAPHER_SYNCED}) + TIMESTAMP_BASE_CHOREOGRAPHER_SYNCED, + TIMESTAMP_BASE_READOUT_SENSOR}) public @interface TimestampBase {}; /** @hide */ @@ -974,7 +995,7 @@ public final class OutputConfiguration implements Parcelable { public void setTimestampBase(@TimestampBase int timestampBase) { // Verify that the value is in range if (timestampBase < TIMESTAMP_BASE_DEFAULT || - timestampBase > TIMESTAMP_BASE_CHOREOGRAPHER_SYNCED) { + timestampBase > TIMESTAMP_BASE_READOUT_SENSOR) { throw new IllegalArgumentException("Not a valid timestamp base value " + timestampBase); } diff --git a/core/java/android/hardware/face/FaceManager.java b/core/java/android/hardware/face/FaceManager.java index 31f3b6aef251..7092e43596ec 100644 --- a/core/java/android/hardware/face/FaceManager.java +++ b/core/java/android/hardware/face/FaceManager.java @@ -1363,19 +1363,31 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan // Consolidate positional feedback to reduce noise during authentication. case FACE_ACQUIRED_NOT_DETECTED: + return context.getString(R.string.face_acquired_not_detected); case FACE_ACQUIRED_TOO_CLOSE: + return context.getString(R.string.face_acquired_too_close); case FACE_ACQUIRED_TOO_FAR: + return context.getString(R.string.face_acquired_too_far); case FACE_ACQUIRED_TOO_HIGH: + // TODO(b/181269243) Change back once error codes are fixed. + return context.getString(R.string.face_acquired_too_low); case FACE_ACQUIRED_TOO_LOW: + // TODO(b/181269243) Change back once error codes are fixed. + return context.getString(R.string.face_acquired_too_high); case FACE_ACQUIRED_TOO_RIGHT: + // TODO(b/181269243) Change back once error codes are fixed. + return context.getString(R.string.face_acquired_too_left); case FACE_ACQUIRED_TOO_LEFT: + // TODO(b/181269243) Change back once error codes are fixed. + return context.getString(R.string.face_acquired_too_right); case FACE_ACQUIRED_POOR_GAZE: + return context.getString(R.string.face_acquired_poor_gaze); case FACE_ACQUIRED_PAN_TOO_EXTREME: + return context.getString(R.string.face_acquired_pan_too_extreme); case FACE_ACQUIRED_TILT_TOO_EXTREME: + return context.getString(R.string.face_acquired_tilt_too_extreme); case FACE_ACQUIRED_ROLL_TOO_EXTREME: - return context.getString(R.string.face_acquired_poor_gaze); - - // Provide more detailed feedback for other soft errors. + return context.getString(R.string.face_acquired_roll_too_extreme); case FACE_ACQUIRED_INSUFFICIENT: return context.getString(R.string.face_acquired_insufficient); case FACE_ACQUIRED_TOO_BRIGHT: @@ -1394,6 +1406,10 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan return context.getString(R.string.face_acquired_obscured); case FACE_ACQUIRED_SENSOR_DIRTY: return context.getString(R.string.face_acquired_sensor_dirty); + case FACE_ACQUIRED_DARK_GLASSES_DETECTED: + return context.getString(R.string.face_acquired_dark_glasses_detected); + case FACE_ACQUIRED_MOUTH_COVERING_DETECTED: + return context.getString(R.string.face_acquired_mouth_covering_detected); // Find and return the appropriate vendor-specific message. case FACE_ACQUIRED_VENDOR: { @@ -1459,11 +1475,13 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan case FACE_ACQUIRED_ROLL_TOO_EXTREME: return context.getString(R.string.face_acquired_roll_too_extreme); case FACE_ACQUIRED_FACE_OBSCURED: - case FACE_ACQUIRED_DARK_GLASSES_DETECTED: - case FACE_ACQUIRED_MOUTH_COVERING_DETECTED: return context.getString(R.string.face_acquired_obscured); case FACE_ACQUIRED_SENSOR_DIRTY: return context.getString(R.string.face_acquired_sensor_dirty); + case FACE_ACQUIRED_DARK_GLASSES_DETECTED: + return context.getString(R.string.face_acquired_dark_glasses_detected); + case FACE_ACQUIRED_MOUTH_COVERING_DETECTED: + return context.getString(R.string.face_acquired_mouth_covering_detected); case FACE_ACQUIRED_VENDOR: { String[] msgArray = context.getResources().getStringArray( R.array.face_acquired_vendor); diff --git a/core/proto/android/server/windowmanagerservice.proto b/core/proto/android/server/windowmanagerservice.proto index 152d729da3b6..92ac389ece67 100644 --- a/core/proto/android/server/windowmanagerservice.proto +++ b/core/proto/android/server/windowmanagerservice.proto @@ -116,6 +116,7 @@ message KeyguardControllerProto { repeated KeyguardOccludedProto keyguard_occluded_states = 2 [deprecated=true]; optional bool aod_showing = 3; repeated KeyguardPerDisplayProto keyguard_per_display = 4; + optional bool keyguard_going_away = 5; } message KeyguardOccludedProto { @@ -132,6 +133,7 @@ message KeyguardPerDisplayProto { optional bool keyguard_showing = 2; optional bool aod_showing = 3; optional bool keyguard_occluded = 4; + optional bool keyguard_going_away = 5; } /* represents PhoneWindowManager */ diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 4370acd379c1..e8244c4e7217 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Vingerafdrukslot"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Kan nie vingerafdruksensor gebruik nie"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Besoek \'n verskaffer wat herstelwerk doen."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Kon nie gesigdata akkuraat vasvang nie. Probeer weer."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Kan nie jou gesigmodel skep nie. Probeer weer."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Te helder. Probeer sagter beligting."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Te donker. Probeer helderder beligting."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Beweeg foon verder weg"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Beweeg foon nader."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Beweeg foon hoër op."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Beweeg foon laer af."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Beweeg foon na links."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Beweeg foon na regs."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Probeer helderder beligting"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Beweeg foon verder weg"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Beweeg foon nader"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Beweeg foon hoër op"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Beweeg foon laer af"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Beweeg foon na jou linkerkant"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Beweeg foon na jou regterkant"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Kyk asseblief meer reguit na jou toestel."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Posisioneer jou gesig direk voor die foon."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Kan nie jou gesig sien nie. Hou jou foon op oogvlak."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Te veel beweging. Hou foon stil."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Skryf jou gesig asseblief weer in."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Kan nie meer gesig herken nie. Probeer weer."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Te eenders. Verander asseblief jou pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Draai jou kop \'n bietjie minder."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Kantel jou kop \'n bietjie minder."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Draai jou kop \'n bietjie minder."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Kan nie gesig herken nie. Probeer weer."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Verander die posisie van jou kop effens"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Kyk meer reguit na jou foon"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Kyk meer reguit na jou foon"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Kyk meer reguit na jou foon"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Verwyder enigiets wat jou gesig versteek."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Maak die bokant van jou skerm skoon, insluitend die swart balk"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Jou gesig moet heeltemal sigbaar wees"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Jou gesig moet heeltemal sigbaar wees"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Kan nie jou gesigmodel skep nie. Probeer weer."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Donkerbril bespeur. Jou gesig moet heeltemal sigbaar wees."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Gesigbedekking bespeur. Jou gesig moet heeltemal sigbaar wees."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Kan nie gesig verifieer nie. Hardeware nie beskikbaar nie."</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 030262902833..296d39cc8e0a 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"በጣት አሻራ መክፈቻ"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"የጣት አሻራ ዳሳሽን መጠቀም አይቻልም"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"የጥገና አገልግሎት ሰጪን ይጎብኙ።"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"ትክክለኛ የፊት ውሂብ ማንሳት አልተቻለም። እንደገና ይሞክሩ።"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"የመልክዎን ሞዴል መፍጠር አልተቻለም። እንደገና ይሞክሩ።"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"ከልክ በላይ ፈካ ያለ። ይበልጥ ረጋ ያለ ብርሃን አጠቃቀምን ይሞክሩ።"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"ከልክ በላይ ጨለማ ነው። ከዚህ ፈካ ያለ ብርሃን አጠቃቀምን ይሞክሩ።"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ስልክን ይበልጥ አርቀው ያንቀሳቅሱት።"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ስልክን ወደ ቅርብ ቦታ ያንቀሳቅሱ።"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ስልኩን ከፍ ወዳለ ቦታ ያንቀሳቅሱት።"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ስልክን ወደ ታች ዝቅ ያድርጉ።"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ስልክን ወደ ግራ ያንቀሳቅሱ።"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ስልክን ወደ ቀኝ ያንቀሳቅሱ።"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"ከዚህ ፈካ ያለ ብርሃንን ይሞክሩ"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ስልኩን ያርቁት"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ስልኩን ያቅርቡት"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ስልኩን ከፍ ወዳለ ቦታ ይውሰዱት"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ስልኩን ወደ ታች ዝቅ ያድርጉ"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ስልክዎን ወደ በስተግራዎ ይውሰዱት"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ስልኩን ወደ በስተቀኝዎ ይውሰዱት"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"እባክዎ መሣሪያዎን ይበልጥ በቀጥታ ይመልከቱ።"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"መልክዎን በቀጥታ ከስልኩ ፊት ያድርጉት።"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"የእርስዎን መልክ ማየት አይችልም። ስልክዎን በዓይን ትክክል ይያዙ።"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"ከልክ በላይ ብዙ እንቅስቃሴ። ስልኩን ቀጥ አድርገው ይያዙት።"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"እባክዎ ፊትዎን እንደገና ያስመዝግቡ"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"ከእንግዲህ ፊትን ለይቶ ማወቅ አይችልም። እንደገና ይሞክሩ።"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"በጣም ይመሳሰላል፣ እባክዎ የእርስዎን ፎቶ አነሳስ ይለውጡ"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"ጭንቅላትዎን ትንሽ ብቻ ያዙሩት።"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"ጭንቅላትዎን ትንሽ ብቻ ያጋድሉት።"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"ጭንቅላትዎን ትንሽ ብቻ ያዙሩት።"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"መልክን መለየት አልተቻለም። እንደገና ይሞክሩ።"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"የጭንቅላትዎን ቦታ በትንሹ ይለዋውጡ"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"ስልክዎን ይበልጥ በቀጥታ ይመልከቱ"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"ስልክዎን ይበልጥ በቀጥታ ይመልከቱ"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ስልክዎን ይበልጥ በቀጥታ ይመልከቱ"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"የእርስዎን ፊት የሚደብቀውን ሁሉንም ነገር በማስወገድ ላይ"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"የማያ ገጽዎን አናት ያጽዱት፣ ጥቁር አሞሌውን ጨምሮ"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"መልክዎ ሙሉ በሙሉ መታየት አለበት"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"መልክዎ ሙሉ በሙሉ መታየት አለበት"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"የመልክዎን ሞዴል መፍጠር አልተቻለም። እንደገና ይሞክሩ።"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ጠቆር ያሉ መነጽሮች ተገኝተዋል። መልክዎ ሙሉ በሙሉ መታየት አለበት።"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"የመልክ መሸፈኛ ተገኝቷል። መልክዎ ሙሉ በሙሉ መታየት አለበት።"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"መልክን ማረጋገጥ አይቻልም። ሃርድዌር የለም።"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 08499953678d..08929b21dab4 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -638,26 +638,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"فتح الجهاز ببصمة الإصبع"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"لا يمكن استخدام مستشعر بصمات الإصبع"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"يُرجى التواصل مع مقدِّم خدمات إصلاح."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"تعذّر تسجيل بيانات دقيقة للوجه. حاول مرة أخرى."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"يتعذّر إنشاء نموذج الوجه. يُرجى إعادة المحاولة."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"ساطع للغاية. تجربة مستوى سطوع أقلّ."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"الصورة معتمة للغاية. يُرجى زيادة السطوع."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"يُرجى نقل الهاتف مسافة أبعد."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"انقل الهاتف إلى مكان قريب."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"يُرجى رفع الهاتف للأعلى."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"يُرجى خفض الهاتف للأسفل."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"يُرجى نقل الهاتف إلى اليمين."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"يُرجى نقل الهاتف إلى اليسار."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"جرِّب زيادة الإضاءة."</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"يُرجى إبعاد الهاتف عنك."</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"يُرجى تقريب الهاتف منك."</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"يُرجى رفع الهاتف للأعلى."</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"يُرجى خفض الهاتف للأسفل."</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"يُرجى تحريك الهاتف جهة اليسار."</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"يُرجى تحريك الهاتف جهة اليمين."</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"يُرجى النظر إلى جهازك مباشرة أكثر."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"ضع وجهك أمام الهاتف مباشرة."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"تتعذّر رؤية وجهك. ارفع هاتفك إلى مستوى العينَين."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"حركة أكثر من اللازم يُرجى حمل بدون حركة."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"يُرجى إعادة تسجيل وجهك."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"لم يعُد يمكن التعرّف على الوجه. حاول مرة أخرى."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"الوجه مشابه جدًا، يُرجى تغيير وضعيتك."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"حرّك رأسك قليلاً نحو الأمام مباشرة."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"يُرجى إمالة رأسك أقل قليلاً."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"حرّك رأسك قليلاً نحو الوسط."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"يتعذّر التعرّف على الوجه. يُرجى إعادة المحاولة."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"غيِّر موضع رأسك قليلاً."</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"يُرجى النظر إلى هاتفك مباشرةً."</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"يُرجى النظر إلى هاتفك مباشرةً."</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"يُرجى النظر إلى هاتفك مباشرةً."</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"عليك بإزالة أي شيء يُخفي وجهك."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"يُرجى تنظيف الجزء العلوي من الشاشة، بما في ذلك الشريط الأسود."</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"يجب أن يكون وجهك ظاهرًا بالكامل."</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"يجب أن يكون وجهك ظاهرًا بالكامل."</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"يتعذّر إنشاء نموذج الوجه. يُرجى إعادة المحاولة."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"تمّ رصد نظارة شمسية. يجب أن يكون وجهك ظاهرًا بالكامل."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"تمّ رصد قناع على الوجه. يجب أن يكون وجهك ظاهرًا بالكامل."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"يتعذّر التحقُّق من الوجه. الجهاز غير مُتاح."</string> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 09c1870feb40..28ca15636fed 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ফিংগাৰপ্ৰিন্ট আনলক"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"ফিংগাৰপ্ৰিণ্ট ছেন্সৰ ব্যৱহাৰ কৰিব নোৱাৰি"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"মেৰামতি সেৱা প্ৰদানকাৰী কোনো প্ৰতিষ্ঠানলৈ যাওক।"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"সঠিক মুখমণ্ডলৰ ডেটা কেপচাৰ নহ’ল। আকৌ চেষ্টা কৰক।"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"মুখাৱয়বৰ মডেল সৃষ্টি কৰিব নোৱাৰি। পুনৰ চেষ্টা কৰক।"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"অতি উজ্জ্বল। ইয়াতকৈ কম পোহৰৰ উৎস ব্যৱহাৰ কৰক।"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"অতি আন্ধাৰ। উজ্জ্বল লাইট ব্যৱহাৰ কৰক।"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ফ’নটো আৰু আঁতৰলৈ নিয়ক।"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ফ’নটো ওচৰলৈ আনক।"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ফ’নটো ওপৰলৈ নিয়ক।"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ফ’নটো তললৈ নিয়ক"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ফ’নটো বাওঁফালে নিয়ক।"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ফ’নটো সোঁফালে নিয়ক।"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"উজ্জ্বল পোহৰ থকা ঠাইলৈ গৈ চাওক"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ফ’নটো আৰু আঁতৰলৈ নিয়ক"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ফ’নটো ওচৰলৈ আনক"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ফ’নটো ওপৰলৈ নিয়ক"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ফ’নটো তললৈ নিয়ক"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ফ’নটো আপোনাৰ বাওঁফাললৈ নিয়ক"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ফ’নটো আপোনাৰ সোঁফাললৈ নিয়ক"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"আপোনাৰ ডিভাইচটোলৈ অধিক পোনে পোনে চাওক।"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"আপোনাৰ মুখখন পোনপটীয়াকৈ ফ’নটোৰ সন্মুখত ৰাখক।"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"আপোনাৰ মুখাৱয়ব দেখা নাই। আপোনাৰ ফ’নটো চকুৰ স্তৰত ধৰি ৰাখক।"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"বেছি লৰচৰ কৰি আছে। ফ’নটো স্থিৰকৈ ধৰক।"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"আপোনাৰ মুখমণ্ডল পুনৰ পঞ্জীয়ন কৰক।"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"মুখমণ্ডল আৰু চিনাক্ত কৰিব নোৱাৰি। আকৌ চেষ্টা কৰক।"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"একে ধৰণৰ হৈছে, অনুগ্ৰহ কৰি আপোনাৰ প’জটো সলনি কৰক।"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"আপোনাৰ মূৰটো সামান্য কমকৈ ঘূৰাওক।"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"আপোনাৰ মূৰটো অলপ কমকৈ হেলনীয়া কৰক।"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"আপোনাৰ মূৰটো সামান্য কমকৈ ঘূৰাওক।"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"মুখাৱয়ব চিনিব নোৱাৰি। পুনৰ চেষ্টা কৰক।"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"আপোনাৰ মূৰটোৰ স্থান সামান্য সলনি কৰক"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"আপোনাৰ ফ’নটোলৈ আৰু পোনপটীয়াকৈ চাওক"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"আপোনাৰ ফ’নটোলৈ আৰু পোনপটীয়াকৈ চাওক"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"আপোনাৰ ফ’নটোলৈ আৰু পোনপটীয়াকৈ চাওক"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"আপোনাৰ মুখখন ঢাকি ৰখা বস্তুবোৰ আঁতৰাওক।"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ক’লা বাৰডালকে ধৰি আপোনাৰ স্ক্রীনৰ ওপৰৰ অংশ চাফা কৰক"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"আপোনাৰ মুখাৱয়ব সম্পূৰ্ণৰূপে দেখা পোৱা হৈ থাকিবই লাগিব"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"আপোনাৰ মুখাৱয়ব সম্পূৰ্ণৰূপে দেখা পোৱা হৈ থাকিবই লাগিব"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"মুখাৱয়বৰ মডেল সৃষ্টি কৰিব নোৱাৰি। পুনৰ চেষ্টা কৰক।"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ডাঠ ৰঙৰ চশমা চিনাক্ত কৰা হৈছে। আপোনাৰ মুখাৱয়ব সম্পূৰ্ণৰূপে দেখা পোৱা হৈ থাকিবই লাগিব।"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"মুখাৱয়বত আৱৰণ চিনাক্ত কৰা হৈছে। আপোনাৰ মুখাৱয়ব সম্পূৰ্ণৰূপে দেখা পোৱা হৈ থাকিবই লাগিব।"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"মুখমণ্ডল সত্যাপন কৰিব পৰা নগ’ল। হাৰ্ডৱেৰ নাই।"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 862ef3cc93b7..a7911de524c5 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Barmaq izi ilə kiliddən çıxarma"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Barmaq izi sensorundan istifadə etmək mümkün deyil"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Təmir provayderini ziyarət edin."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Dəqiq üz datası əldə edilmədi. Yenidən cəhd edin."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Üz modelinizi yaratmaq olmur. Yenə cəhd edin."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Çox işıqlıdır. Daha az işıqlı şəkli sınayın."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Çox qaranlıqdır. Parlaq işıqdan istifadə edin."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Telefonu uzaq tutun."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Telefonu yaxına tutun."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Telefonu yuxarı tutun."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Telefonu aşağı tutun."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Telefonu sola hərəkət etdirin."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Telefonu sağa hərəkət etdirin."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Parlaq işıqdan istifadə edin"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Telefonu uzaq tutun"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Telefonu yaxına tutun"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefonu yuxarı tutun"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefonu aşağı tutun"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Telefonu sola tutun"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Telefonu sağa tutun"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Birbaşa cihaza baxın."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Üzünüzü telefonun qarşısında sabit saxlayın."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Üzünüz görünmür. Telefonunuzu göz səviyyəsində saxlayın."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Cihaz stabil deyil. Telefonu tərpətməyin."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Üzünüzü yenidən qeydiyyatdan keçirin."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Üzü artıq tanımaq olmur. Yenidən cəhd edin."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Digəri ilə oxşardır, pozanızı dəyişin."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Başınızı bir az döndərin."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Başınızı azca əyin."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Başınızı bir az döndərin."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Üzü tanımaq olmur. Yenə cəhd edin."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Başınızın yerini bir az dəyişdirin"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Telefonunuza düz baxın"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Telefonunuza düz baxın"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Telefonunuza düz baxın"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Üzünüzü gizlədən maneələri kənarlaşdırın."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Qara panel daxil olmaqla, ekranın yuxarısını təmizləyin"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Üzünüz tam görünməlidir"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Üzünüz tam görünməlidir"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Üz modelinizi yaratmaq olmur. Yenə cəhd edin."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Tünd eynək aşkar edildi. Üzünüz tam görünməlidir."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Üz örtüyü aşkar edildi. Üzünüz tam görünməlidir."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Üz doğrulanmadı. Avadanlıq əlçatan deyil."</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index b40c77b09459..971d23d3e7df 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -635,26 +635,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Otključavanje otiskom prsta"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Ne možete da koristite senzor za otisak prsta"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Posetite dobavljača za popravke."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Snimanje lica nije uspelo. Probajte ponovo."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Pravljenje modela lica nije uspelo. Probajte ponovo."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Previše je svetlo. Probajte sa slabijim osvetljenjem."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Pretamno je. Probajte sa jačim osvetljenjem."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Udaljite telefon."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Približite telefon."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Pomerite telefon nagore."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Pomerite telefon nadole."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Pomerite telefon ulevo."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Pomerite telefon udesno."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Probajte sa jačim osvetljenjem"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Udaljite telefon"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Približite telefon"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Pomerite telefon nagore"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Pomerite telefon nadole"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Pomerite telefon ulevo"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Pomerite telefon udesno"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Gledajte pravo u uređaj."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Postavite lice direktno ispred telefona"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Ne vidi se lice. Držite telefon u visini očiju."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Mnogo se pomerate. Držite telefon mirno."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Ponovo registrujte lice."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Više ne može da se prepozna lice. Probajte ponovo."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Previše je slično, promenite pozu."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Malo manje pomerite glavu."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Malo manje nagnite glavu."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Malo manje pomerite glavu."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Lice nije prepoznato. Probajte ponovo."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Malo pomerite glavu"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Gledajte pravo u telefon"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Gledajte pravo u telefon"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Gledajte pravo u telefon"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Uklonite sve što vam zaklanja lice."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistite gornji deo ekrana, uključujući crnu traku"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Lice mora da bude potpuno vidljivo"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Lice mora da bude potpuno vidljivo"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Pravljenje modela lica nije uspelo. Probajte ponovo."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Otkrivene su tamne naočari. Lice mora da bude potpuno vidljivo."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Otkriveno je prekrivanje lica. Lice mora da bude potpuno vidljivo."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Provera lica nije uspela. Hardver nije dostupan."</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 3daea4b6896d..706c870575d5 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -636,26 +636,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Разблакіраванне адбіткам пальца"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Не ўдалося скарыстаць сканер адбіткаў пальцаў"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Звярніцеся ў сэрвісны цэнтр."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Не атрымалася распазнаць твар. Паўтарыце спробу."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Не ўдалося стварыць мадэль твару. Паўтарыце."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Занадта светла. Прыглушыце асвятленне."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Занадта цёмна. Павялічце асвятленне."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Перамясціце тэлефон далей."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Перамясціце тэлефон бліжэй."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Перамясціце тэлефон вышэй."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Перамясціце тэлефон ніжэй."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Перамясціце тэлефон улева."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Перамясціце тэлефон управа."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Павялічце асвятленне"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Перамясціце тэлефон далей"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Перамясціце тэлефон бліжэй"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Перамясціце тэлефон вышэй"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Перамясціце тэлефон ніжэй"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Перамясціце тэлефон улева"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Перамясціце тэлефон управа"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Глядзіце прама на экран прылады."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Трымайце тэлефон прама перад тварам."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Не відаць твару. Трымайце тэлефон на ўзроўні вачэй."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Трымайце прыладу нерухома. Трымайце тэлефон роўна."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Паўтарыце рэгістрацыю твару."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Не ўдаецца распазнаць твар. Паўтарыце спробу."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Не бачна розніцы. Памяняйце позу."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Вы занадта моцна павярнулі галаву."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Трымайце галаву прама."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Вы занадта моцна павярнулі галаву."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Твар не распазнаны. Паўтарыце спробу."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Крыху змяніце паставу галавы"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Глядзіце прама на экран тэлефона"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Глядзіце прама на экран тэлефона"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Глядзіце прама на экран тэлефона"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Прыміце ўсё, што закрывае ваш твар."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Ачысціце ад бруду верхнюю частку экрана, у тым ліку чорную панэль"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Твар павінен быць цалкам бачным"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Твар павінен быць цалкам бачным"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Не ўдалося стварыць мадэль твару. Паўтарыце спробу."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Выяўлены цёмныя акуляры. Твар павінен быць цалкам бачным."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Нешта засланяе твар. Твар павінен быць цалкам бачным."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Твар не спраўджаны. Абсталяванне недаступнае."</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 9c871474c38d..b9c285fe87b9 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Отключване с отпечатък"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Сензорът за отпечатъци не може да се използва"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Посетете оторизиран сервиз."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Лицето не бе заснето точно. Опитайте отново."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Моделът на лицето ви не бе създаден. Опитайте пак."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Твърде светло е. Опитайте при по-слабо осветление."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Твърде тъмно е. Опитайте при по-силно осветление."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Отдалечете телефона."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Доближете телефона."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Преместете телефона по-високо."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Преместете телефона по-ниско."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Преместете телефона наляво."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Преместете телефона надясно."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Опитайте при по-силно осветление"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Отдалечете телефона"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Доближете телефона"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Преместете телефона по-високо"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Преместете телефона по-ниско"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Преместете телефона наляво"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Преместете телефона надясно"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Моля, гледайте точно към устройството си."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Позиционирайте лицето си директно пред телефона."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Лицето ви не се вижда. Дръжте телефона на нивото на очите си."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Твърде много движение. Дръжте телефона неподвижно."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Моля, регистрирайте лицето си отново."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Лицето не бе разпознато. Опитайте отново."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Позата ви е сходна с предишна. Моля, променете я."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Не завъртайте главата си толкова много."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Не накланяйте главата си толкова много."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Не завъртайте главата си толкова много."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Лицето не е разпознато. Опитайте отново."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Леко променете позицията на главата си"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Гледайте директно към телефона си"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Гледайте директно към телефона си"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Гледайте директно към телефона си"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Премахнете всичко, което закрива лицето ви."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Почистете горната част на екрана си, включително черната лента"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Лицето ви трябва да е напълно видимо"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Лицето ви трябва да е напълно видимо"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Моделът на лицето ви не бе създаден. Опитайте отново."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Изглежда, че носите тъмни очила. То трябва да е напълно видимо."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Изглежда, че лицето ви е покрито. То трябва да е напълно видимо."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Лицето не може да се потвърди. Хардуерът не е налице."</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 09fdd3c4d04a..2241ef498a2d 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ফিঙ্গারপ্রিন্ট আনলক"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"আঙ্গুলের ছাপের সেন্সর ব্যবহার করা যাচ্ছে না"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"একজন মেরামতি মিস্ত্রির কাছে যান।"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"মুখের সঠিক ডেটা পাওয়া যায়নি। আবার চেষ্টা করুন।"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"ফেস মডেল তৈরি করা যাচ্ছে না। আবার চেষ্টা করুন।"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"খুব উজ্জ্বল। আলো কমিয়ে চেষ্টা করে দেখুন।"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"খুব অন্ধকার। আরও উজ্জ্বল আলো ব্যবহার করে দেখুন।"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ফোনটি আরও দূরে নিয়ে যান।"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ফোনটি আরও কাছে নিয়ে আসুন।"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ফোন উঁচুতে তুলুন।"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ফোন নিচে নামান।"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ফোনটি বাঁদিকে সরান।"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ফোনটি ডানদিকে সরান।"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"আরও উজ্জ্বল আলো ব্যবহার করে দেখুন"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ফোন আরও দূরে নিয়ে যান"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ফোন আরও কাছে নিয়ে আসুন"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ফোন আরও উঁচুতে তুলুন"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ফোন নিচে নামান"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ফোন আপনার বাঁদিকে সরান"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ফোন আপনার ডানদিকে সরান"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"সরাসরি ডিভাইসের দিকে তাকান।"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"আপনার মুখ সরাসরি ফোনের সামনে রাখুন।"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"আপনার মুখ দেখা যাচ্ছে না। ফোন আপনার চোখের সোজাসুজি ধরুন।"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"খুব বেশি নড়ছে। ফোনটি যাতে না কাঁপে সেইভাবে ধরুন।"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"আপনার মুখের ছবি আবার নথিভুক্ত করুন।"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"আর মুখ চিনতে পারবেন না। আবার চেষ্টা করুন।"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"একই ধরনের দেখতে, একটু অন্যদিকে ঘুরে দাঁড়ান।"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"আপনার মাথাটি নিচের দিকে সামান্য নামান।"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"আপনার মাথা একটু কম ঝোঁকান।"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"আপনার মাথাটি সামান্য ঘোরান।"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"মুখ শনাক্ত করা যাচ্ছে না। আবার চেষ্টা করুন।"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"আপনার মাথার পজিশন সামান্য পরিবর্তন করুন"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"আপনার ফোনের দিকে আরও সরাসরি তাকান"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"আপনার ফোনের দিকে আরও সরাসরি তাকান"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"আপনার ফোনের দিকে আরও সরাসরি তাকান"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"আপনার মুখকে আড়াল করে এমন সব কিছু সরিয়ে দিন।"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ব্ল্যাক বার সহ আপনার স্ক্রিনের উপরের অংশ মুছে ফেলুন"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"আপনার মুখ পুরোপুরি দৃশ্যমান হতে হবে"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"আপনার মুখ পুরোপুরি দৃশ্যমান হতে হবে"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ফেস মডেল তৈরি করা যাচ্ছে না। আবার চেষ্টা করুন।"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"কালো চশমা শনাক্ত করা হয়েছে। আপনার মুখ পুরোপুরি দৃশ্যমান হতে হবে।"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"মুখে মাস্ক শনাক্ত করা হয়েছে। আপনার মুখ পুরোপুরি দৃশ্যমান হতে হবে।"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"ফেস যাচাই করা যায়নি। হার্ডওয়্যার উপলভ্য নেই।"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 7ae030c3759d..6bc16c182b1f 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -635,26 +635,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Otključavanje otiskom prsta"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Nije moguće koristiti senzor za otisak prsta"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Posjetite pružaoca usluga za popravke."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Lice nije snimljeno precizno. Pokušajte ponovo."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Nije moguće kreirati model lica. Pokušajte ponovo."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Previše svijetlo. Probajte s blažim osvjetljenjem."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Previše je tamno. Pokušajte s jačim osvjetljenjem."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Odmaknite telefon."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Primaknite telefon."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Pomjerite telefon naviše."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Pomjerite telefon naniže."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Pomjerite telefon ulijevo."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Pomjerite telefon udesno."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Pokušajte s jačim osvjetljenjem"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Odmaknite telefon"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Primaknite telefon"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Pomjerite telefon naviše"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Pomjerite telefon naniže"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Pomjerite telefon ulijevo"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Pomjerite telefon udesno"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Gledajte direktno u uređaj."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Postavite lice direktno ispred telefona"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Ne vidi se lice. Držite telefon u visini očiju."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Previše pokreta. Držite telefon mirno."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Ponovo registrirajte lice."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Više nije moguće prepoznati lice. Pokušajte opet."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Previše slično, promijenite položaj."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Malo manje zakrenite glavu."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Malo manje nagnite glavu."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Malo manje zakrenite glavu."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Nije moguće prepoznati lice. Pokušajte ponovo."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Malo pomjerite glavu"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Gledajte direktno u telefon"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Gledajte direktno u telefon"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Gledajte direktno u telefon"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Uklonite sve što vam zaklanja lice."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistite vrh ekrana, uključujući crnu traku"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Lice se mora u potpunosti vidjeti"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Lice se mora u potpunosti vidjeti"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nije moguće kreirati model lica. Pokušajte ponovo."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Otkrivene su tamne naočale. Lice se mora u potpunosti vidjeti."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Otkriveno je pokrivalo preko lica. Lice se mora u potpunosti vidjeti."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Nije moguće potvrditi lice. Hardver nije dostupan."</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 850157b71982..1970123c9733 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Desbloqueig amb empremta digital"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"No es pot utilitzar el sensor d\'empremtes digitals"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visita un proveïdor de reparacions."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"No es reconeix la teva cara. Torna-ho a provar."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"No es pot crear el model facial. Torna-ho a provar."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Massa brillant Prova una il·luminació més suau."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Massa fosc. Prova una il·luminació més brillant."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Allunya\'t del telèfon."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Apropa el telèfon."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Mou el telèfon més amunt."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Mou el telèfon més avall."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Mou el telèfon cap a l\'esquerra."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Mou el telèfon cap a la dreta."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Prova amb més il·luminació"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Allunya\'t del telèfon"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Apropa el telèfon"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Mou el telèfon més amunt"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Mou el telèfon més avall"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Mou el telèfon cap a l\'esquerra"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Mou el telèfon cap a la dreta"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Mira més directament cap al dispositiu."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Posa la cara directament davant del telèfon."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"No se\'t veu la cara. Mantén el telèfon a l\'altura dels ulls."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Massa moviment. Subjecta bé el telèfon."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Torna a registrar la teva cara."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Ja no es reconeix la teva cara. Torna-ho a provar."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"És massa semblant; canvia de postura."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"No giris tant el cap."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"No inclinis tant el cap."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"No giris tant el cap."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"No podem reconèixer la cara. Torna-ho a provar."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Canvia lleugerament la posició del cap"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira més directament al telèfon"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira més directament al telèfon"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira més directament al telèfon"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Treu qualsevol cosa que amagui la teva cara."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Neteja la part superior de la pantalla, inclosa la barra negra"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"La cara ha de ser completament visible"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"La cara ha de ser completament visible"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"No es pot crear el model facial. Torna-ho a provar."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"S\'han detectat ulleres fosques. La cara ha de ser completament visible."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"S\'ha detectat una mascareta. La cara ha de ser completament visible."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"No es pot verificar la cara. Maquinari no disponible."</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index f86e783f6b1d..b57d3ec154b1 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -636,26 +636,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Odemknutí otiskem prstu"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Snímač otisků prstů nelze použít"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Navštivte servis"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Obličej se nepodařilo zachytit. Zkuste to znovu."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Model se nepodařilo vytvořit. Zkuste to znovu."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Je příliš světlo. Zmírněte osvětlení."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Je moc velká tma. Přejděte na světlo."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Umístěte telefon dál."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Umístěte telefon blíž."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Umístěte telefon výš."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Umístěte telefon níž."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Přesuňte telefon vlevo."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Přesuňte telefon vpravo."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Přejděte na světlo"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Umístěte telefon dál"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Umístěte telefon blíž"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Umístěte telefon výš"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Umístěte telefon níž"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Umístěte telefon víc doleva"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Umístěte telefon víc doprava"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Dívejte se přímo na zařízení."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Umístěte obličej přímo před telefon."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Obličej není vidět. Držte telefon na úrovni očí."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Příliš mnoho pohybu. Držte telefon nehybně."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Zaznamenejte obličej znovu."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Obličej už nelze rozpoznat. Zkuste to znovu."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Příliš podobné, změňte výraz."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Natočte hlavu o něco méně."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Nakloňte hlavu trochu méně."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Natočte hlavu o něco méně."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Obličej se nepodařilo rozpoznat. Zkuste to znovu."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Mírně pohněte hlavou"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Dívejte se přímo na telefon"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Dívejte se přímo na telefon"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Dívejte se přímo na telefon"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Odstraňte vše, co vám zakrývá obličej."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistěte horní část obrazovky včetně černé části"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Obličej musí být plně viditelný"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Obličej musí být plně viditelný"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Model se nepodařilo vytvořit. Zkuste to znovu."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Byly zjištěny tmavé brýle. Obličej musí být plně viditelný."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Byl zjištěn zakrytý obličej. Obličej musí být plně viditelný."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Obličej nelze ověřit. Hardware není dostupný."</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index f165cc3490ec..596034901650 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Oplåsning med fingeraftryk"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Fingeraftrykslæseren kan ikke bruges"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Få den repareret."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Der blev ikke registreret ansigtsdata. Prøv igen."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Din ansigtsmodel kan ikke oprettes. Prøv igen."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Der er for lyst. Prøv en mere dæmpet belysning."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"For mørkt. Prøv med mere belysning."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Flyt telefonen længere væk."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Flyt telefonen tættere på."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Løft telefonen højere op."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Sænk telefonen."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Flyt telefonen til venstre."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Flyt telefonen til højre."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Prøv med mere belysning"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Flyt telefonen længere væk"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Flyt telefonen tættere på"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Løft telefonen højere op"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Sænk telefonen"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Flyt telefonen længere til venstre for dig"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Flyt telefonen længere til højre for dig"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Kig mere direkte på din enhed."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Sørg for, at dit ansigt er direkte foran telefonen."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Dit ansigt kan ikke registreres. Hold din telefon i øjenhøjde."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Der er for meget bevægelse. Hold telefonen stille."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Registrer dit ansigt igen."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Ansigtet kan ikke længere genkendes. Prøv igen."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Det minder for meget om et andet. Skift stilling."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Du skal ikke dreje hovedet så meget."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Ret dit hoved lidt op."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Du skal ikke dreje hovedet så meget."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Ansigtet kan ikke genkendes. Prøv igen."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Flyt dit hoved en smule"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Kig mere direkte på din telefon"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Kig mere direkte på din telefon"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Kig mere direkte på din telefon"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Hvis noget skjuler dit ansigt, skal du fjerne det."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Rengør toppen af din skærm, inkl. den sorte bjælke"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Dit ansigt skal være helt synligt"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Dit ansigt skal være helt synligt"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Din ansigtsmodel kan ikke oprettes. Prøv igen."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Mørke briller er registreret. Dit ansigt skal være helt synligt."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ansigtsdækning er registreret. Dit ansigt skal være helt synligt."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Ansigt ikke bekræftet. Hardware ikke tilgængelig."</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 7a1813b1e8c1..839099a84950 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Entsperrung per Fingerabdruck"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Der Fingerabdrucksensor kann nicht verwendet werden"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Suche einen Reparaturdienstleister auf."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Gesichtsdaten nicht gut erfasst. Erneut versuchen."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Kein Gesichtsmodell möglich. Versuche es erneut."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Zu hell. Schwächere Beleuchtung ausprobieren."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Zu dunkel. Probier eine hellere Beleuchtung aus."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Beweg das Telefon weiter weg."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Beweg das Telefon näher heran."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Halte das Smartphone höher."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Beweg das Smartphone nach unten."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Beweg das Smartphone nach links."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Beweg das Smartphone nach rechts."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Probiere es mit einer helleren Beleuchtung"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Bewege das Smartphone weiter weg"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Bewege das Smartphone näher heran"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Bewege das Smartphone nach oben"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Bewege das Smartphone nach unten"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Bewege das Smartphone nach links"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Bewege das Smartphone nach rechts"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Bitte sieh direkt auf dein Gerät."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Halte dein Gesicht direkt vor dein Smartphone."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Dein Gesicht wurde nicht erkannt. Halte dein Smartphone auf Augenhöhe."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Zu viel Unruhe. Halte das Smartphone ruhig."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Bitte registriere dein Gesicht noch einmal."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Gesicht wird nicht mehr erkannt. Erneut versuchen."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Zu ähnlich. Bitte dreh deinen Kopf etwas."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Dreh den Kopf etwas weniger zur Seite."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Neig den Kopf etwas weniger stark."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Neig den Kopf etwas weniger stark."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Gesicht nicht erkannt. Versuche es noch einmal."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Ändere die Position deines Kopfes leicht"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Sieh direkt auf dein Smartphone"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Sieh direkt auf dein Smartphone"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Sieh direkt auf dein Smartphone"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Entferne alles, was dein Gesicht verdeckt."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Reinige den oberen Teil deines Bildschirms, einschließlich der schwarzen Leiste"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Dein Gesicht muss vollständig sichtbar sein"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Dein Gesicht muss vollständig sichtbar sein"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Dein Gesichtsmodell kann nicht erstellt werden. Versuche es noch einmal."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dunkle Brille erkannt. Dein Gesicht muss vollständig sichtbar sein."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Dein Gesicht ist bedeckt. Es muss vollständig sichtbar sein."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Gesicht nicht erkannt. Hardware nicht verfügbar."</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 118b63b340dd..8389e3088878 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Ξεκλείδωμα με δακτυλικό αποτύπωμα"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Δεν είναι δυνατή η χρήση του αισθητήρα δακτυλικών αποτυπωμάτων"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Επισκεφτείτε έναν πάροχο υπηρεσιών επισκευής."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Αδύνατη λήψη ακριβών δεδομ. προσώπου. Επανάληψη."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Αδύν. η δημιουρ. του μοντ. προσώπ. Δοκιμάστε ξανά."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Υπερβολικά έντονος φωτισμός. Δοκιμάστε πιο ήπιο."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Πολύ σκοτεινό περιβάλλον. Φροντίστε τον φωτισμό."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Απομακρύνετε περισσότερο το τηλέφωνο."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Πλησιάστε περισσότερο το τηλέφωνο."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Μετακινήστε το τηλέφωνο πιο ψηλά."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Μετακινήστε το τηλέφωνο πιο χαμηλά."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Μετακινήστε το τηλέφωνο στα αριστερά."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Μετακινήστε το τηλέφωνο στα δεξιά."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Δοκιμάστε με περισσότερο φως"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Απομακρύνετε περισσότερο το τηλέφωνο"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Φέρτε πιο κοντά το τηλέφωνό σας"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Μετακινήστε το τηλέφωνο πιο ψηλά"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Μετακινήστε πιο χαμηλά το τηλέφωνο"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Μετακινήστε το τηλέφωνο προς τα αριστερά"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Μετακινήστε το τηλέφωνο προς τα δεξιά"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Κοιτάξτε απευθείας τη συσκευή σας."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Στρέψτε το πρόσωπό σάς απευθείας στο τηλέφωνο."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Δεν εντοπίστηκε το πρόσωπό σας. Κρατήστε το τηλέφωνο στο ύψος των ματιών."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Πάρα πολλή κίνηση. Κρατήστε σταθερό το τηλέφωνο."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Καταχωρίστε ξανά το πρόσωπό σας."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Αδύνατη η αναγνώριση του προσώπου. Επανάληψη."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Πολύ παρόμοιο, αλλάξτε την πόζα σας."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Στρέψτε λιγότερο το κεφάλι σας."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Γείρετε λιγότερο το κεφάλι σας."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Στρέψτε λιγότερο το κεφάλι σας."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Το πρόσωπο δεν αναγνωρίζεται. Δοκιμάστε ξανά."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Αλλάξτε ελαφρώς τη θέση του κεφαλιού σας"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Κοιτάξτε απευθείας το τηλέφωνό σας"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Κοιτάξτε απευθείας το τηλέφωνό σας"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Κοιτάξτε απευθείας το τηλέφωνό σας"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Απομακρύνετε οτιδήποτε κρύβει το πρόσωπό σας."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Καθαρίστε το επάνω μέρος της οθόνης σας, συμπεριλαμβανομένης της μαύρης γραμμής"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Το πρόσωπό σας πρέπει να φαίνεται πλήρως."</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Το πρόσωπό σας πρέπει να φαίνεται πλήρως."</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Αδύνατη η δημιουργία του μοντέλου προσώπου. Δοκιμάστε ξανά."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Ανιχνεύτηκαν σκούρα γυαλιά. Το πρόσωπό σας πρέπει να φαίνεται πλήρως."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ανιχνεύτηκε κάλυμμα προσώπου. Το πρόσωπό σας πρέπει να φαίνεται πλήρως."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Αδύν. επαλήθ. προσώπου. Μη διαθέσιμος εξοπλισμός."</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 4e1c415db7a9..180ff8fa73db 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Fingerprint Unlock"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Can’t use fingerprint sensor"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visit a repair provider."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Couldn’t capture accurate face data. Try again."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Can’t create your face model. Try again."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Too bright. Try gentler lighting."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Too dark. Try brighter lighting."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Move phone farther away."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Move phone closer."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Move phone higher."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Move phone lower."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Move phone to the left."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Move phone to the right."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Try brighter lighting"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Move phone further away"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Move phone closer"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Move phone higher"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Move phone lower"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Move phone to your left"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Move phone to your right"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Please look more directly at your device."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Position your face directly in front of the phone."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Can’t see your face. Hold your phone at eye level."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Too much motion. Hold phone steady."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Please re-enroll your face."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"No longer able to recognise face. Try again."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Too similar, please change your pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Turn your head a little less."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Tilt your head a little less."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Turn your head a little less."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Can’t recognise face. Try again."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Change the position of your head slightly"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Look more directly at your phone"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Look more directly at your phone"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Look more directly at your phone"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Remove anything hiding your face."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Clean the top of your screen, including the black bar"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Your face must be fully visible"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Your face must be fully visible"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Can’t create your face model. Try again."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dark glasses detected. Your face must be fully visible."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Face covering detected. Your face must be fully visible."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Can’t verify face. Hardware not available."</string> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index 0d8285251ea5..12821fe1527c 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Fingerprint Unlock"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Can’t use fingerprint sensor"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visit a repair provider."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Couldn’t capture accurate face data. Try again."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Can’t create your face model. Try again."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Too bright. Try gentler lighting."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Too dark. Try brighter lighting."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Move phone farther away."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Move phone closer."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Move phone higher."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Move phone lower."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Move phone to the left."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Move phone to the right."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Try brighter lighting"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Move phone further away"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Move phone closer"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Move phone higher"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Move phone lower"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Move phone to your left"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Move phone to your right"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Please look more directly at your device."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Position your face directly in front of the phone."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Can’t see your face. Hold your phone at eye level."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Too much motion. Hold phone steady."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Please re-enroll your face."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"No longer able to recognise face. Try again."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Too similar, please change your pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Turn your head a little less."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Tilt your head a little less."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Turn your head a little less."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Can’t recognise face. Try again."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Change the position of your head slightly"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Look more directly at your phone"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Look more directly at your phone"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Look more directly at your phone"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Remove anything hiding your face."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Clean the top of your screen, including the black bar"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Your face must be fully visible"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Your face must be fully visible"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Can’t create your face model. Try again."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dark glasses detected. Your face must be fully visible."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Face covering detected. Your face must be fully visible."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Can’t verify face. Hardware not available."</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 606dc80308e2..f4f7e80f6307 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Fingerprint Unlock"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Can’t use fingerprint sensor"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visit a repair provider."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Couldn’t capture accurate face data. Try again."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Can’t create your face model. Try again."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Too bright. Try gentler lighting."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Too dark. Try brighter lighting."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Move phone farther away."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Move phone closer."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Move phone higher."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Move phone lower."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Move phone to the left."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Move phone to the right."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Try brighter lighting"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Move phone further away"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Move phone closer"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Move phone higher"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Move phone lower"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Move phone to your left"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Move phone to your right"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Please look more directly at your device."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Position your face directly in front of the phone."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Can’t see your face. Hold your phone at eye level."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Too much motion. Hold phone steady."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Please re-enroll your face."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"No longer able to recognise face. Try again."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Too similar, please change your pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Turn your head a little less."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Tilt your head a little less."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Turn your head a little less."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Can’t recognise face. Try again."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Change the position of your head slightly"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Look more directly at your phone"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Look more directly at your phone"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Look more directly at your phone"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Remove anything hiding your face."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Clean the top of your screen, including the black bar"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Your face must be fully visible"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Your face must be fully visible"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Can’t create your face model. Try again."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dark glasses detected. Your face must be fully visible."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Face covering detected. Your face must be fully visible."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Can’t verify face. Hardware not available."</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 399034380a9b..631cf2b0c3da 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Fingerprint Unlock"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Can’t use fingerprint sensor"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visit a repair provider."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Couldn’t capture accurate face data. Try again."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Can’t create your face model. Try again."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Too bright. Try gentler lighting."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Too dark. Try brighter lighting."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Move phone farther away."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Move phone closer."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Move phone higher."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Move phone lower."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Move phone to the left."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Move phone to the right."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Try brighter lighting"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Move phone further away"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Move phone closer"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Move phone higher"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Move phone lower"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Move phone to your left"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Move phone to your right"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Please look more directly at your device."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Position your face directly in front of the phone."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Can’t see your face. Hold your phone at eye level."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Too much motion. Hold phone steady."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Please re-enroll your face."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"No longer able to recognise face. Try again."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Too similar, please change your pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Turn your head a little less."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Tilt your head a little less."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Turn your head a little less."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Can’t recognise face. Try again."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Change the position of your head slightly"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Look more directly at your phone"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Look more directly at your phone"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Look more directly at your phone"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Remove anything hiding your face."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Clean the top of your screen, including the black bar"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Your face must be fully visible"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Your face must be fully visible"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Can’t create your face model. Try again."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dark glasses detected. Your face must be fully visible."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Face covering detected. Your face must be fully visible."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Can’t verify face. Hardware not available."</string> diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml index b8aca7344ac3..3bb25cb3ebe4 100644 --- a/core/res/res/values-en-rXC/strings.xml +++ b/core/res/res/values-en-rXC/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Fingerprint Unlock"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Can’t use fingerprint sensor"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visit a repair provider."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Couldn’t capture accurate face data. Try again."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Can’t create your face model. Try again."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Too bright. Try gentler lighting."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Too dark. Try brighter lighting."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Move phone farther away."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Move phone closer."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Move phone higher."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Move phone lower."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Move phone to the left."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Move phone to the right."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Try brighter lighting"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Move phone farther away"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Move phone closer"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Move phone higher"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Move phone lower"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Move phone to your left"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Move phone to your right"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Please look more directly at your device."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Position your face directly in front of the phone."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Can’t see your face. Hold your phone at eye level."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Too much motion. Hold phone steady."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Please re-enroll your face."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"No longer able to recognize face. Try again."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Too similar, please change your pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Turn your head a little less."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Tilt your head a little less."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Turn your head a little less."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Can’t recognize face. Try again."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Change the position of your head slightly"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Look more directly at your phone"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Look more directly at your phone"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Look more directly at your phone"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Remove anything hiding your face."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Clean the top of your screen, including the black bar"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Your face must be fully visible"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Your face must be fully visible"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Can’t create your face model. Try again."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dark glasses detected. Your face must be fully visible."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Face covering detected. Your face must be fully visible."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Can’t verify face. Hardware not available."</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 93322da3adfc..3497962d5742 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Desbloqueo con huellas dactilares"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"No se puede usar el sensor de huellas dactilares"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Consulta a un proveedor de reparaciones."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Datos faciales imprecisos. Vuelve a intentarlo."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"No se puede crear modelo de rostro. Reinténtalo."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Demasiado brillante. Prueba con menos iluminación."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Demasiado oscuro. Prueba con más iluminación."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Aleja un poco más el teléfono."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Acerca el teléfono."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Mueve el teléfono hacia arriba."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Mueve el teléfono hacia abajo."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Mueve el teléfono hacia la izquierda."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Mueve el teléfono hacia la derecha."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Prueba con más iluminación"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Aleja el teléfono un poco más"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Acerca el teléfono"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Mueve el teléfono hacia arriba"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Mueve el teléfono hacia abajo"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Mueve el teléfono hacia la izquierda"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Mueve el teléfono hacia la derecha"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Mira directamente al dispositivo."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Ubica el rostro directamente frente al teléfono."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"No se ve tu cara. Sostén el teléfono a la altura de los ojos."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Te estás moviendo demasiado. No muevas el teléfono"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Vuelve a registrar tu rostro."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Ya no se reconoce el rostro. Vuelve a intentarlo."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Es muy similar a la anterior. Haz otra pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Gira la cabeza un poco menos."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Inclina un poco menos la cabeza."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Gira la cabeza un poco menos."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"No se reconoce el rostro. Vuelve a intentarlo."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Cambia levemente la posición de la cabeza"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira el teléfono de forma más directa"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira el teléfono de forma más directa"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira el teléfono de forma más directa"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Quítate cualquier objeto que te cubra el rostro."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpia la parte superior de la pantalla, incluida la barra negra"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Tu rostro debe verse completamente"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Tu rostro debe verse completamente"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"No se puede crear modelo de rostro. Vuelve a intentarlo."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Se detectaron lentes oscuros. Tu rostro debe verse completamente."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Se detectó que llevas mascarilla. Tu rostro debe verse completamente."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"No se verificó el rostro. Hardware no disponible."</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 819cc47a0cb9..c8c3804695a8 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Desbloqueo con huella digital"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"No se puede usar el sensor de huellas digitales"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visita un proveedor de reparaciones."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Datos faciales no reconocidos. Vuelve a intentarlo."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"No se puede crear tu modelo. Inténtalo de nuevo."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Hay demasiada luz. Busca un sitio menos iluminado."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Demasiado oscuro. Prueba en un lugar con más luz."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Aleja el teléfono."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Acerca el teléfono."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Sube el teléfono."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Baja el teléfono."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Mueve el teléfono hacia la izquierda."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Mueve el teléfono hacia la derecha."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Prueba en un lugar con más luz"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Aleja el teléfono"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Acerca el teléfono"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Sube el teléfono"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Baja el teléfono"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Mueve el teléfono hacia la izquierda"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Mueve el teléfono hacia la derecha"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Mira de forma más directa al dispositivo."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Coloca la cara directamente frente al teléfono."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"No se detecta tu cara. Sujeta el teléfono a la altura de los ojos."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"El teléfono se mueve demasiado. Mantenlo quieto."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Vuelve a registrar tu cara."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"No puede reconocer tu cara. Vuelve a intentarlo."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Se parece mucha a la anterior. Pon otra cara."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Gira la cabeza un poco menos."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"No inclines tanto la cabeza."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"No gires tanto la cabeza."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"No se reconoce la cara. Inténtalo de nuevo."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Cambia ligeramente la posición de tu cabeza"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira al teléfono de forma más directa"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira al teléfono de forma más directa"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira al teléfono de forma más directa"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Retira cualquier objeto que te tape la cara."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpia la parte superior de la pantalla, incluida la barra de color negro"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Tu cara se debe poder ver por completo"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Tu cara se debe poder ver por completo"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"No se puede crear tu modelo. Inténtalo de nuevo."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Gafas oscuras detectadas. Tu cara se debe poder ver por completo."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Mascarilla detectada. Tu cara se debe poder ver por completo."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"No se puede verificar. Hardware no disponible."</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index ec5e203234ab..85aab3337b0c 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Sõrmejäljega avamine"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Sõrmejäljeandurit ei saa kasutada"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Külastage remonditeenuse pakkujat."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Näoandmeid ei saanud jäädvustada. Proovige uuesti."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Teie näomudelit ei saa luua. Proovige uuesti."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Liiga ere. Proovige hämaramat valgust."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Liiga pime. Proovige parema valgustusega kohas."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Liigutage telefon kaugemale."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Liigutage telefon lähemale."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Liigutage telefoni kõrgemale."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Liigutage telefoni allapoole."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Liigutage telefoni vasakule."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Liigutage telefoni paremale."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Proovige parema valgustusega kohas"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Liigutage telefoni kaugemale"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Liigutage telefoni lähemale"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Liigutage telefoni kõrgemale"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Liigutage telefoni allapoole"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Liigutage telefoni vasakule"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Liigutage telefoni paremale"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Vaadake otse oma seadmesse."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Hoidke oma nägu otse telefoni ees."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Teie nägu ei ole näha. Hoidke telefoni silmade kõrgusel."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Liiga palju liikumist. Hoidke telefoni paigal."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Registreerige oma nägu uuesti."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Nägu ei õnnestu enam tuvastada. Proovige uuesti."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Liiga sarnane, palun muutke oma asendit."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Pöörake oma pead veidi vähem."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Kallutage oma pead pisut vähem."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Pöörake oma pead veidi vähem."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Nägu ei õnnestu tuvastada. Proovige uuesti."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Muutke pisut oma pea asendit"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Vaadake otse telefoni"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Vaadake otse telefoni"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Vaadake otse telefoni"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Eemaldage kõik, mis varjab teie nägu."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Puhastage ekraani ülaosa, sh musta värvi riba"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Teie nägu peab olema täielikult nähtaval"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Teie nägu peab olema täielikult nähtaval"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Teie näomudelit ei saa luua. Proovige uuesti."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Tuvastati tumedad prillid. Teie nägu peab olema täielikult nähtaval."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Tuvastati nägu kattev ese. Teie nägu peab olema täielikult nähtaval."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Nägu ei saa kinnitada. Riistvara pole saadaval."</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index cb5a59140e96..50b739da141f 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Hatz-marka bidez desblokeatzea"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Ezin da erabili hatz-marken sentsorea"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Jarri harremanetan konponketak egiten dituen hornitzaile batekin."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Ezin izan dira bildu argazkiaren datu zehatzak. Saiatu berriro."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Ezin da sortu aurpegi-eredua. Saiatu berriro."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Argi gehiegi dago. Joan toki ilunago batera."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Ilunegi dago. Erabili argi gehiago."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Urrundu telefonoa."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Hurbildu telefonoa."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Igo telefonoa."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Jaitsi telefonoa."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Mugitu telefonoa ezkerretara."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Mugitu telefonoa eskuinetara."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Erabili argi gehiago"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Urrundu telefonoa"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Hurbildu telefonoa"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Igo telefonoa"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Jaitsi telefonoa"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Eraman telefonoa ezkerrera"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Eraman telefonoa eskuinera"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Begiratu zuzenago gailuari."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Ipini aurrez aurre aurpegia eta telefonoa."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Ezin da hauteman aurpegia. Eutsi telefonoari begien parean."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Mugimendu gehiegi dago. Eutsi tinko telefonoari."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Erregistratu berriro aurpegia."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Ez dugu ezagutzen aurpegi hori. Saiatu berriro."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Jarrera berdintsuegia da. Alda ezazu."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Biratu burua pixka bat gutxiago."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Makurtu burua pixka bat gutxiago."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Biratu burua pixka bat gutxiago."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Ezin da hauteman aurpegia. Saiatu berriro."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Aldatu buruaren posizioa apur bat"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Begiratu zuzenago telefonoari"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Begiratu zuzenago telefonoari"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Begiratu zuzenago telefonoari"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Kendu aurpegia estaltzen dizuten gauzak."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Garbitu pantailaren goialdea, barra beltza barne"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Aurpegi osoak egon behar du ikusgai"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Aurpegi osoak egon behar du ikusgai"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Ezin da sortu aurpegi-eredua. Saiatu berriro."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Betaurreko ilunak hauteman dira. Aurpegi osoak egon behar du ikusgai."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Maskara bat hauteman da. Aurpegi osoak egon behar du ikusgai."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Ezin da egiaztatu aurpegia. Hardwarea ez dago erabilgarri."</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 9636c86de480..db530a37e5e2 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"قفلگشایی با اثر انگشت"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"امکان استفاده از حسگر اثر انگشت وجود ندارد"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"به ارائهدهنده خدمات تعمیر مراجعه کنید."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"دادههای دقیق چهره ضبط نشد. دوباره امتحان کنید."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"مدل چهره ایجاد نشد. دوباره امتحان کنید."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"خیلی روشن است. روشناییاش را ملایمتر کنید."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"خیلی تاریک است. تصویر را روشنتر کنید."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"تلفن را به دورتر منتقل کنید."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"تلفن را نزدیکتر بیاورید."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"تلفن را بالاتر ببرید."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"تلفن را پایینتر بیاورید."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"تلفن را بهسمت چپ حرکت دهید."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"تلفن را به سمت راست حرکت دهید."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"نور را بیشتر کنید"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"تلفن را دورتر ببرید"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"تلفن را نزدیکتر بیاورید"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"تلفن را بالاتر ببرید"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"تلفن را پایینتر ببرید"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"تلفن را بهسمت چپ ببرید"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"تلفن را بهسمت راست ببرید"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"لطفاً مستقیم به دستگاه نگه کنید."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"صورتتان را مستقیماً روبروی تلفن قرار دهید."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"چهره دیده نمیشود. تلفن را همسطح چشمانتان نگه دارید."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"حرکت خیلی زیاد است. تلفن را ثابت نگهدارید."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"لطفاً چهرهتان را مجدداً ثبت کنید."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"دیگر چهره را تشخیص نمیدهد. دوباره امتحان کنید."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"بسیار شبیه قبلی است، لطفاً قیافه دیگری بگیرید."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"سرتان را کمی صاف بگیرید."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"سرتان را کمی صاف کنید."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"سرتان را کمی صاف بگیرید."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"چهره شناسایی نشد. دوباره امتحان کنید."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"موقعیت سرتان را کمی تغییر دهید"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"مستقیمتر به تلفن نگاه کنید"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"مستقیمتر به تلفن نگاه کنید"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"مستقیمتر به تلفن نگاه کنید"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"هر چیزی که جلو صورت شما را میگیرد بردارید."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"بالای صفحه و همچنین نوار مشکی را تمیز کنید."</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"چهرهتان باید کاملاً نمایان باشد"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"چهرهتان باید کاملاً نمایان باشد"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"مدل چهره ایجاد نشد. دوباره امتحان کنید."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"عینک تیره شناسایی شد. چهرهتان باید کاملاً نمایان باشد."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"پوشش صورت شناسایی شد. چهرهتان باید کاملاً نمایان باشد."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"چهره تأیید نشد. سختافزار در دسترس نیست."</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 11524b20e655..6d2424f10a7c 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Sormenjälkiavaus"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Sormenjälkitunnistinta ei voi käyttää"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Ota yhteys korjauspalveluun."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Tarkan kasvodatan tallennus epäonnistui. Yritä uudelleen."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Kasvomallia ei voi luoda. Yritä uudelleen."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Liian kirkasta. Kokeile pehmeämpää valaistusta."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Liian pimeää. Kokeile kirkkaampaa valaistusta."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Siirrä puhelinta kauemmas."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Siirrä puhelinta lähemmäs."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Siirrä puhelinta ylemmäs."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Siirrä puhelinta alemmas."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Siirrä puhelinta vasemmalle."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Siirrä puhelinta oikealle."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Kokeile kirkkaampaa valaistusta"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Vie puhelin kauemmas"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Tuo puhelin lähemmäs"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Siirrä puhelinta ylemmäs"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Siirrä puhelinta alemmas"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Siirrä puhelinta vasemmalle"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Siirrä puhelinta oikealle"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Katso suoremmin laitteeseen."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Aseta kasvosi suoraan puhelimen eteen."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Kasvoja ei näy. Pidä puhelinta silmien korkeudella."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Laite liikkui liikaa. Pidä puhelin vakaana."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Rekisteröi kasvot uudelleen."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Ei enää tunnista kasvoja. Yritä uudelleen."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Liian samanlainen, vaihda asentoa."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Käännä päätä vähän vähemmän."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Kallista päätäsi vähän vähemmän."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Käännä päätä vähän vähemmän."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Kasvoja ei voi tunnistaa. Yritä uudelleen."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Liikuta päätä hieman"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Katso suoremmin puhelimeen"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Katso suoremmin puhelimeen"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Katso suoremmin puhelimeen"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Poista esteet kasvojesi edestä."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Puhdista näytön yläreuna, mukaan lukien musta palkki"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Kasvojen täytyy näkyä kokonaan"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Kasvojen täytyy näkyä kokonaan"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Kasvomallia ei voi luoda. Yritä uudelleen."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Tummat lasit havaittu. Kasvojen täytyy näkyä kokonaan."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Kasvot peittävä asia havaittu. Kasvojen täytyy näkyä kokonaan."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Kasvoja ei voi vahvistaa. Laitteisto ei käytettäv."</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 363c89e7589e..105855da833d 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Déverrouillage par empreinte digitale"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Impossible d\'utiliser le capteur d\'empreintes digitales"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Consultez un fournisseur de services de réparation."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Imposs. capt. données visage précises. Réessayez."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Impossible de créer votre modèle facial. Réessayez."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Trop lumineux. Essayez un éclairage plus faible."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Trop sombre. Essayez avec un éclairage plus fort."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Déplacez le téléphone plus loin."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Rapprochez le téléphone."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Déplacez le téléphone plus haut."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Déplacez le téléphone plus bas."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Déplacez le téléphone vers la gauche."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Déplacez le téléphone vers la droite."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Essayez avec un éclairage plus fort"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Éloignez le téléphone"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Rapprochez le téléphone"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Tenez le téléphone plus haut"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Tenez le téléphone plus bas"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Déplacez le téléphone vers la gauche"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Déplacez le téléphone vers la droite"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Veuillez regarder plus directement votre appareil."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Placez votre visage directement devant le téléphone."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Impossible de voir votre visage. Tenez votre téléphone à la hauteur des yeux."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Trop de mouvement. Tenez le téléphone immobile."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Veuillez inscrire votre visage à nouveau."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Ce visage ne sera plus reconnu. Réessayez."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Trop similaire. Changez de pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Tournez un peu moins votre tête."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Inclinez un peu moins votre tête."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Tournez un peu moins votre tête."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Visage non reconnu. Réessayez."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Modifiez légèrement la position de votre tête"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Regardez plus directement votre téléphone"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Regardez plus directement votre téléphone"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Regardez plus directement votre téléphone"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Retirez tout ce qui pourrait couvrir votre visage."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Nettoyez le haut de l\'écran, y compris la barre noire"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Votre visage doit être entièrement visible"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Votre visage doit être entièrement visible"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Impossible de créer votre modèle facial. Réessayez."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Lunettes sombres détectées. Votre visage doit être entièrement visible."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Couvre-visage détecté. Votre visage doit être entièrement visible."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Imposs. de vérif. visage. Matériel non accessible."</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 0f79218f949b..ec0f30c15572 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Déverrouillage par empreinte digitale"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Impossible d\'utiliser le lecteur d\'empreinte digitale"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Contactez un réparateur."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Capture du visage impossible. Réessayez."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Impossible de créer l\'empreinte faciale. Réessayez."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Trop lumineux. Essayez de baisser la lumière."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Trop sombre. Essayez une éclairage plus lumineux."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Éloignez le téléphone."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Rapprochez le téléphone."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Montez le téléphone."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Baissez le téléphone."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Déplacez le téléphone vers la gauche."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Déplacez le téléphone vers la droite."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Essayez un éclairage plus lumineux"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Éloignez le téléphone."</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Rapprochez le téléphone"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Déplacez le téléphone vers le haut"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Déplacez le téléphone vers le bas"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Déplacez le téléphone vers la gauche"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Déplacez le téléphone vers la droite"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Veuillez regarder plus directement l\'appareil."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Placez votre visage en face du téléphone."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Visage non détecté. Tenez votre téléphone à hauteur des yeux."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Trop de mouvement. Ne bougez pas le téléphone."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Veuillez enregistrer à nouveau votre visage."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Impossible de reconnaître le visage. Réessayez."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Ressemble à un visage existant, changez de pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Tournez un peu moins la tête."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Penchez un peu moins la tête."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Tournez un peu moins la tête."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Visage non reconnu. Réessayez."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Déplacez légèrement votre tête."</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Regardez plus directement votre téléphone"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Centrez bien votre visage devant votre téléphone"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Regardez plus directement votre téléphone"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Retirez tout ce qui cache votre visage."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Nettoyez la partie supérieure de l\'écran, y compris la barre noire"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Votre visage doit être entièrement visible"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Votre visage doit être entièrement visible"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Impossible de créer votre empreinte faciale. Réessayez."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Lunettes sombres détectées. Votre visage doit être entièrement visible."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Masque détecté. Votre visage doit être entièrement visible."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Imposs. valider visage. Matériel non disponible."</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index c248c760dcf2..a37889d18fb6 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Desbloqueo dactilar"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Non se puido usar o sensor de impresión dixital"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visita un provedor de reparacións."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Sen datos faciais exactos. Téntao de novo."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Non se puido crear o modelo facial. Téntao de novo."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Hai demasiada iluminación. Proba cunha máis suave."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Hai demasiada escuridade. Proba con máis luz."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Separa máis o teléfono."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Achega máis o teléfono."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Eleva o teléfono."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Baixa o teléfono."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Move o teléfono cara á esquerda."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Move o teléfono cara á dereita."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Proba con máis luz"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Afasta o teléfono"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Achega o teléfono"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Sube o teléfono"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Baixa o teléfono"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Move o teléfono cara á esquerda"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Move o teléfono cara á dereita"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Mira o dispositivo de forma máis directa."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Coloca a cara directamente diante do teléfono."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Non se pode ver a túa cara. Coloca o teléfono á altura dos ollos."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Demasiado movemento. Non movas o teléfono."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Volve rexistrar a túa cara."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Xa non se pode recoñecer a cara. Téntao de novo."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"É moi similar. Cambia a pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Xira a cabeza un pouco menos."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Inclina a cabeza un pouco menos."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Xira a cabeza un pouco menos."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Non se recoñeceu a cara. Téntao de novo."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Cambia lixeiramente a posición da cabeza"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira o teléfono de forma máis directa"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira o teléfono de forma máis directa"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira o teléfono de forma máis directa"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Quita todo o que oculte a túa cara."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpa a parte superior da pantalla, incluída a barra de cor negra"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"A cara debe poder verse por completo"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"A cara debe poder verse por completo"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Non se puido crear o modelo facial. Téntao de novo."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Detectáronse lentes escuras. A cara debe poder verse por completo."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Detectouse unha máscara. A cara debe poder verse por completo."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Sen verificar a cara. Hardware non dispoñible."</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index f850bfbd6d3d..889ef9cd6613 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ફિંગરપ્રિન્ટ અનલૉક"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"ફિંગરપ્રિન્ટ સેન્સરનો ઉપયોગ કરી શકાતો નથી"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"રિપેર કરવાની સેવા આપતા પ્રદાતાની મુલાકાત લો."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"ચહેરાનો સચોટ ડેટા કૅપ્ચર ન થયો. ફરી પ્રયાસ કરો."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"તમારા ચહેરાનું મૉડલ ન બનાવી શકાય. ફરી પ્રયાસ કરો."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"અતિશય પ્રકાશિત. થોડો હળવો પ્રકાશ અજમાવી જુઓ."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"અતિશય ઘેરી. વધુ ઝળહળતો પ્રકાશ અજમાવો"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ફોનને વધુ દૂર ખસેડો."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ફોનને વધુ નજીક લાવો."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ફોનને વધુ ઊંચે ખસેડો."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ફોનને થોડો નીચે ખસેડો."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ફોનને ડાબી બાજુ ખસેડો."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ફોનને જમણી બાજુ ખસેડો."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"વધુ પ્રકાશિત લાઇટિંગ અજમાવો"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ફોનને વધુ દૂર લઈ જાઓ"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ફોનને વધુ નજીક લાવો"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ફોનને વધુ ઊંચે લઈ જાઓ"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ફોનને થોડો નીચે લઈ જાઓ"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ફોનને તમારી ડાબી બાજુએ લઈ જાઓ"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ફોનને તમારી જમણી બાજુએ લઈ જાઓ"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"કૃપા કરીને તમારા ડિવાઇસ તરફ સીધું જુઓ."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"તમારો ચહેરો તમારા ફોનની બિલકુલ સામે રાખો."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"તમારો ચહેરો દેખાતો નથી. તમારા ફોનને આંખના લેવલ પર પકડી રાખો."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"ડિવાઇસ અસ્થિર છે. ફોનને સ્થિર રાખો."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"કૃપા કરીને તમારા ચહેરાની ફરી નોંધણી કરાવો."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"ચહેરો ઓળખી શકાતો નથી. ફરી પ્રયાસ કરો."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"ઘણી સમાનતા ધરાવે છે, કૃપા કરીને તમારો પોઝ બદલો."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"તમારું માથું થોડું ફેરવો."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"તમારું માથું થોડું ઓછું ટિલ્ટ કરો."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"તમારું માથું થોડું ઓછું ફેરવો."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"ચહેરો ઓળખી શકતા નથી. ફરી પ્રયાસ કરો."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"તમારા માથાની સ્થિતિ સહેજ બદલો"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"વધારે પ્રમાણમાં સીધું તમારા ફોન તરફ જુઓ"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"વધારે પ્રમાણમાં સીધું તમારા ફોન તરફ જુઓ"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"વધારે પ્રમાણમાં સીધું તમારા ફોન તરફ જુઓ"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"તમારા ચહેરાને છુપાવતી કંઈપણ વસ્તુ દૂર કરો."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"કાળી પટ્ટી સહિત, તમારી સ્ક્રીનની ટોચ સાફ કરો"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"તમારો આખો ચહેરો દેખાવો આવશ્યક છે"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"તમારો આખો ચહેરો દેખાવો આવશ્યક છે"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"તમારા ચહેરાનું મૉડલ ન બનાવી શકાય. ફરી પ્રયાસ કરો."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"કાળા ચશ્માંની ભાળ મળી. તમારો આખો ચહેરો દેખાવો આવશ્યક છે."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ચહેરો ઢંકાયેલો હોવાની ભાળ મળી. તમારો આખો ચહેરો દેખાવો આવશ્યક છે."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"ચહેરો ચકાસી શકાતો નથી. હાર્ડવેર ઉપલબ્ધ નથી."</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 2f7c69b92f8c..caa0676f6446 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"फ़िंगरप्रिंट अनलॉक"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"फ़िंगरप्रिंट सेंसर इस्तेमाल नहीं किया जा सकता"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"फ़िंगरप्रिंट सेंसर को रिपेयर करने की सेवा देने वाली कंपनी से संपर्क करें."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"चेहरे से जुड़ा सटीक डेटा कैप्चर नहीं किया जा सका. फिर से कोशिश करें."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"चेहरे का माॅडल नहीं बन सका. फिर से कोशिश करें."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"बहुत रोशनी है. हल्की रोशनी आज़माएं."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"बहुत अंधेरा है. बेहतर रोशनी में आज़माएं."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"फ़ोन को दूर ले जाएं."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"फ़ोन को नज़दीक ले जाएं."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"फ़ोन को और ऊपर ले जाएं."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"फ़ोन को थोड़ा नीचे ले जाएं."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"फ़ोन को बाईं ओर घुमाएं."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"फ़ोन को दाईं ओर घुमाएं."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"बेहतर रोशनी में कोशिश करें"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"फ़ोन को दूर ले जाएं"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"फ़ोन को नज़दीक लाएं"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"फ़ोन को थोड़ा और ऊपर ले जाएं"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"फ़ोन को थोड़ा नीचे ले जाएं"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"फ़ोन को अपने बाईं ओर ले जाएं"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"फ़ोन को अपने दाईं ओर ले जाएं"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"कृपया अपने डिवाइस की तरफ़ सीधे देखें."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"अपने चेहरे को फोन के ठीक सामने लाएं."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"आपका चेहरा नहीं दिख रहा है. फ़ोन को अपनी आंखों की सीध में पकड़कर रखें."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"डिवाइस बहुत ज़्यादा हिल रहा है. फ़ोन को बिना हिलाएं पकड़ें."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"कृपया फिर से अपने चेहरे की पहचान कराएं."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"अब चेहरे की पहचान नहीं कर पा रहा. फिर से कोशिश करें."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"चेहरा काफ़ी मिलता-जुलता है, कृपया अपना पोज़ बदलें."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"अपना सिर थोड़ा कम घुमाएं."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"अपने सिर को थोड़ा कम झुकाएं."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"अपना सिर थोड़ा कम घुमाएं."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"चेहरे की पहचान नहीं हुई. फिर से कोशिश करें."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"अपने सिर की पोज़िशन को थोड़ा बदलें"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"अपने फ़ोन की तरफ़ बिलकुल सीधा देखें"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"अपने फ़ोन की तरफ़ बिलकुल सीधा देखें"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"अपने फ़ोन की तरफ़ बिलकुल सीधा देखें"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"आपके चेहरे को छिपाने वाली सभी चीज़ों को हटाएं."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"अपनी स्क्रीन के सबसे ऊपरी हिस्से को साफ़ करें, जिसमें काले रंग वाला बार भी शामिल है"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"आपका पूरा चेहरा दिखना चाहिए"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"आपका पूरा चेहरा दिखना चाहिए"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"चेहरे का माॅडल नहीं बन सका. फिर से कोशिश करें."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"आपने गहरे रंग का चश्मा पहना है. आपका पूरा चेहरा दिखना चाहिए."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"चेहरा ढका हुआ है. आपका पूरा चेहरा दिखना चाहिए."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"चेहरा नहीं पहचान पा रहे. हार्डवेयर उपलब्ध नहीं है."</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index b0bc0b73da1c..40c6e7b5d654 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -635,26 +635,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Otključavanje otiskom prsta"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Senzor otiska prsta ne može se koristiti"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Posjetite davatelja usluga popravaka."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Podaci o licu nisu točni. Pokušajte ponovo."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Izrada modela lica nije uspjela. Pokušajte ponovo."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Presvijetlo je. Pokušajte sa slabijim svjetlom."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Pretamno je. Pokušajte s jačim osvjetljenjem."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Udaljite telefon."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Približite telefon."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Pomaknite telefon više."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Pomaknite telefon niže."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Pomaknite telefon ulijevo."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Pomaknite telefon udesno."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Pokušajte s jačim osvjetljenjem"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Udaljite telefon"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Približite telefon"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Pomaknite telefon prema gore"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Pomaknite telefon prema dolje"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Pomaknite telefon ulijevo"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Pomaknite telefon udesno"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Gledajte izravnije prema uređaju."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Postavite lice izravno ispred telefona."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Vaše se lice ne vidi. Držite telefon u razini očiju."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Previše kretanja. Držite telefon mirno."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Ponovo registrirajte svoje lice."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Lice nije prepoznato. Pokušajte ponovo."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Previše slično, promijenite pozu."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Nagnite glavu malo manje."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Malo manje nagnite glavu."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Nagnite glavu malo manje."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Prepoznavanje lica nije uspjelo. Pokušajte ponovo."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Malo pomaknite glavu"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Gledajte izravnije prema telefonu"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Gledajte ravno u telefon"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Gledajte izravnije prema telefonu"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Uklonite sve što vam zakriva lice."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistite vrh zaslona, uključujući crnu traku"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Vaše lice mora biti potpuno vidljivo"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Vaše lice mora biti potpuno vidljivo"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Izrada modela lica nije uspjela. Pokušajte ponovo."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Otkrivene su tamne naočale. Vaše lice mora biti potpuno vidljivo."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Otkriveno je prekrivanje lica. Vaše lice mora biti potpuno vidljivo."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Lice nije potvrđeno. Hardver nije dostupan."</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 8a0b1ff55db4..3cc4b63d70d4 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Feloldás ujjlenyomattal"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Nem lehet használni az ujjlenyomat-érzékelőt"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Keresse fel a szervizt."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Sikertelen az arc pontos rögzítése. Próbálja újra."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Nem lehet létrehozni az arcmodellt. Próbálja újra."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Túl világos. Próbálja kevésbé erős világítással."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Túl sötét. Próbálja jobb megvilágítás mellett."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Tartsa távolabb a telefont."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Tartsa közelebb a telefont."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Emelje magasabbra a telefont."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Tartsa alacsonyabban a telefont."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Mozgassa a telefont balra."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Mozgassa a telefont jobbra."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Próbálja jobb megvilágítás mellett"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Tartsa távolabb a telefont"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Tartsa közelebb a telefont"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Emelje magasabbra a telefont"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Tartsa alacsonyabban a telefont"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Mozgassa balra a telefont"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Mozgassa jobbra a telefont"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Szemből nézzen az eszközre."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"A telefont közvetlenül az arca elé tegye."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Nem látszik az arca. Tartsa szemmagasságban a telefonját."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Túl sok a mozgás. Tartsa stabilan a telefont."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Rögzítsen újra képet az arcáról."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Már nem lehet felismerni az arcát. Próbálja újra."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Túlságosan hasonló, változtasson a pózon."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Kicsit kevésbé fordítsa el a fejét."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Tartsa kicsit egyenesebben a fejét."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Kicsit kevésbé fordítsa el a fejét."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Az arc nem felismerhető. Próbálja újra."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Egy kicsit mozdítsa el a fejét"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Nézzen egyenesen a telefonjára"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Nézzen egyenesen a telefonjára"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Nézzen egyenesen a telefonjára"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Távolítson el mindent, ami takarja az arcát."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Tisztítsa meg a képernyő tetejét, a fekete sávot is beleértve."</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Arcának teljesen láthatónak kell lennie"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Arcának teljesen láthatónak kell lennie"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nem lehet létrehozni az arcmodellt. Próbálja újra."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Sötét szemüveget észlelt a rendszer. Arcának teljesen láthatónak kell lennie."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Valami eltakarja az arcát. Arcának teljesen láthatónak kell lennie."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Sikertelen arcellenőrzés. A hardver nem érhető el."</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index 01d937586686..c9cf7a7560bb 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Մատնահետքով ապակողպում"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Մատնահետքերի սկաները հնարավոր չէ օգտագործել"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Այցելեք սպասարկման կենտրոն։"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Չհաջողվեց գրանցել դեմքի ճշգրիտ տվյալները։ Կրկնեք։"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Չհաջողվեց ստեղծել ձեր դեմքի մոդելը։ Նորից փորձեք։"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Շատ լուսավոր է։ Փորձեք ավելի թեթև լուսավորություն։"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Շատ մութ է։ Փորձեք ավելի պայծառ լուսավորություն։"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Փոքր-ինչ հեռու պահեք հեռախոսը։"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Մոտեցրեք հեռախոսը։"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Բարձրացրեք հեռախոսը։"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Իջեցրեք հեռախոսը։"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Տեղափոխեք հեռախոսը ձախ:"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Տեղափոխեք հեռախոսը աջ:"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Ավելի պայծառ դարձրեք լուսավորությունը"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Փոքր-ինչ հեռու պահեք հեռախոսը"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Մոտեցրեք հեռախոսը"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Բարձրացրեք հեռախոսը"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Իջեցրեք հեռախոսը"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Տեղափոխեք հեռախոսը ձախ"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Տեղափոխեք հեռախոսը աջ"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Նայեք ուղիղ էկրանին։"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Պահեք ձեր դեմքն անմիջապես հեռախոսի էկրանի դիմաց:"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Ձեր դեմքը չի երևում։ Հեռախոսը պահեք աչքերի մակարդակում։"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Շատ եք շարժում։ Հեռախոսն անշարժ պահեք։"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Նորից փորձեք։"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Չհաջողվեց ճանաչել դեմքը։ Նորից փորձեք:"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Շատ նման է նախորդին։ Փոխեք ձեր դիրքը։"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Գլուխն ուղիղ պահեք։"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Գլուխը մի փոքր իջեցրեք։"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Գլուխն ուղիղ պահեք։"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Դեմքը չի հաջողվում ճանաչել։ Նորից փորձեք։"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Թեթևակի փոխեք գլխի դիրքը"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Նայեք ուղիղ էկրանին"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Նայեք ուղիղ էկրանին"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Նայեք ուղիղ էկրանին"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Հեռացրեք այն ամենը, ինչը թաքցնում է ձեր երեսը:"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Մաքրեք էկրանի վերևի մասը, ներառյալ սև գոտին"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Չհաջողվեց ստեղծել ձեր դեմքի մոդելը։ Նորից փորձեք։"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Հանեք ակնոցը։ Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի։"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Դեմքի մի մասը ծածկված է։ Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի։"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Չհաջողվեց հաստատել դեմքը։ Սարքն անհասանելի է:"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 8ce9ca244111..6cb05009b27a 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Fingerprint Unlock"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Tidak dapat menggunakan sensor sidik jari"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Kunjungi penyedia reparasi."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Tidak bisa mengambil data wajah akurat. Coba lagi."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Tidak dapat membuat model wajah Anda. Coba lagi."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Terlalu terang. Coba cahaya yang lebih lembut."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Terlalu gelap. Coba pencahayaan yang lebih cerah."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Gerakkan ponsel menjauh."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Gerakkan ponsel mendekat."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Geser ponsel ke atas."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Geser ponsel ke bawah."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Gerakkan ponsel ke kiri."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Gerakkan ponsel ke kanan."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Coba pencahayaan yang lebih cerah"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Jauhkan ponsel"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Dekatkan ponsel"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Gerakkan ponsel ke atas"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Gerakkan ponsel ke bawah"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Gerakkan ponsel ke kiri Anda"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Gerakkan ponsel ke kanan Anda"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Lihat langsung ke perangkat."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Posisikan wajah Anda tepat di depan ponsel."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Tidak dapat melihat wajah Anda. Pegang ponsel sejajar dengan mata."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Terlalu banyak gerakan. Stabilkan ponsel."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Daftarkan ulang wajah Anda."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Tidak lagi dapat mengenali wajah. Coba lagi."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Terlalu mirip, ubah pose Anda."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Putar sedikit kepala Anda."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Miringkan sedikit kepala Anda."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Putar sedikit kepala Anda."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Tidak dapat mengenali wajah. Coba lagi."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Ubah sedikit posisi kepala"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Lihat lebih lurus ke arah ponsel"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Lihat lebih lurus ke arah ponsel"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Lihat lebih lurus ke arah ponsel"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Singkirkan apa saja yang menutupi wajah Anda."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Bersihkan bagian atas layar, termasuk kotak hitam"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Wajah Anda harus terlihat sepenuhnya"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Wajah Anda harus terlihat sepenuhnya"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Tidak dapat membuat model wajah Anda. Coba lagi."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Kacamata hitam terdeteksi. Wajah Anda harus terlihat sepenuhnya."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Penutup wajah terdeteksi. Wajah Anda harus terlihat sepenuhnya."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Tidak dapat memverifikasi wajah. Hardware tidak tersedia."</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index 4346b6323de0..186074608074 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Fingrafarskenni"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Ekki er hægt að nota fingrafaralesara"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Þú verður að fara á verkstæði."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Nákvæm andlitsgögn fengust ekki. Reyndu aftur."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Ekki tekst að búa til andlitslíkan. Reyndu aftur."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Of bjart. Prófaðu mýkri lýsingu."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Of dimmt. Prófaðu sterkari lýsingu."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Færðu símann lengra í burtu."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Færðu símann nær."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Færðu símann hærra."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Færðu símann neðar."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Færðu símann til vinstri."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Færðu símann til hægri."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Prófaðu sterkari lýsingu"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Færðu símann lengra frá"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Færðu símann nær"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Færðu símann hærra"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Færðu símann neðar"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Færðu símann til vinstri"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Færðu símann til hægri"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Horfðu beint á tækið."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Hafðu andlitið beint fyrir framan símann."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Sé ekki andlitið á þér. Haltu símanum í augnhæð."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Of mikil hreyfing. Haltu símanum stöðugum."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Skráðu nafnið þitt aftur."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Andlit þekkist ekki lengur. Reyndu aftur."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Of svipað. Stilltu þér öðruvísi upp."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Snúðu höfðinu aðeins minna."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Hallaðu höfðinu aðeins minna."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Snúðu höfðinu aðeins minna."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Andlit þekkist ekki. Reyndu aftur."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Færðu höfuðið aðeins til"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Horfðu beint á símann"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Horfðu beint á símann"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Horfðu beint á símann"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Fjarlægðu það sem kann að hylja andlitið."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Hreinsaðu efsta hluta skjásins þíns, þ.m.t. svörtu stikuna"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Allt andlitið á þér þarf að sjást"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Allt andlitið á þér þarf að sjást"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Ekki tekst að búa til andlitslíkan. Reyndu aftur."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dökk gleraugu greindust. Allt andlitið á þér þarf að sjást."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Eitthvað er fyrir andlitinu. Allt andlitið á þér þarf að sjást."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Andlit ekki staðfest. Vélbúnaður er ekki tiltækur."</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 01f43a73274c..1b2138bbf97f 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Sblocco con l\'impronta"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Impossibile utilizzare il sensore di impronte digitali"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Contatta un fornitore di servizi di riparazione."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Impossibile acquisire dati viso accurati. Riprova."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Impossibile creare il modello del volto. Riprova."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Troppa luce. Prova con una luce più soft."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Troppo buio. Prova con più luce."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Sposta il telefono più lontano."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Avvicina il telefono."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Sposta il telefono più in alto."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Sposta il telefono più in basso."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Sposta il telefono verso sinistra."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Sposta il telefono verso destra."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Prova con più luce"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Allontana il telefono"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Avvicina il telefono"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Sposta il telefono più in alto"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Sposta il telefono più in basso"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Sposta il telefono verso sinistra"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Sposta il telefono verso destra"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Guarda più direttamente verso il dispositivo."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Posiziona il viso davanti al telefono."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Impossibile vedere il volto. Tieni il telefono all\'altezza degli occhi."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Troppo movimento. Tieni fermo il telefono."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Ripeti l\'acquisizione del volto."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Non è più possibile riconoscere il volto. Riprova."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Troppo simile; cambia posa."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Gira un po\' meno la testa."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Inclina un po\' meno la testa."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Gira un po\' meno la testa."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Impossibile riconoscere il volto. Riprova."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Cambia leggermente la posizione della testa"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Guarda dritto nel telefono"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Guarda dritto nel telefono"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Guarda dritto nel telefono"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Rimuovi tutto ciò che ti nasconde il viso."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Pulisci la parte superiore dello schermo, inclusa la barra nera"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Il tuo volto deve essere visibile per intero"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Il tuo volto deve essere visibile per intero"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Impossibile creare il modello del volto. Riprova."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Sono stati rilevati occhiali scuri. Il tuo volto deve essere visibile per intero."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"È stata rilevata una mascherina. Il tuo volto deve essere visibile per intero."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Imposs. verificare volto. Hardware non disponibile."</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 5b43fe921666..b2e0802b7e09 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -636,26 +636,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ביטול הנעילה בטביעת אצבע"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"לא ניתן להשתמש בחיישן טביעות האצבע"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"צריך ליצור קשר עם ספק תיקונים."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"לא ניתן היה לקלוט את הפנים במדויק. יש לנסות שוב."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"לא ניתן ליצור את התבנית לזיהוי הפנים. יש לנסות שוב."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"בהירה מדי. צריך תאורה עדינה יותר."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"התמונה חשוכה מדי. צריך תאורה חזקה יותר."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"יש להרחיק את הטלפון."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"צריך לקרב את הטלפון."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"צריך להרים את הטלפון גבוה יותר."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"צריך להוריד את הטלפון."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"צריך להזיז את הטלפון שמאלה."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"צריך להזיז את הטלפון ימינה."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"כדאי לנסות בתאורה חזקה יותר"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"צריך להרחיק את הטלפון"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"צריך לקרב את הטלפון"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"צריך להגביה את הטלפון"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"צריך להוריד את הטלפון"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"צריך להזיז את הטלפון שמאלה"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"צריך להזיז את הטלפון ימינה"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"יש להביט ישירות אל המכשיר."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"עליך למקם את הפנים ישירות מול הטלפון."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"אי אפשר לראות את הפנים שלך. צריך להחזיק את הטלפון בגובה העיניים."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"יותר מדי תנועה. יש להחזיק את הטלפון בצורה יציבה."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"יש לסרוק שוב את הפנים."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"כבר לא ניתן לזהות פנים. יש לנסות שוב."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"דומה מדי, יש לשנות תנוחה."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"עליך ליישר קצת את הראש."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"יש ליישר קצת את הראש."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"צריך ליישר קצת את הראש."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"לא ניתן לזהות את הפנים. יש לנסות שוב."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"צריך לשנות מעט את תנוחת הראש"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"צריך להביט ישירות בטלפון"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"צריך להביט ישירות בטלפון"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"צריך להביט ישירות בטלפון"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"יש להסיר כל דבר שמסתיר את הפנים."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"צריך לנקות את החלק העליון של המסך, כולל הסרגל השחור"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"הפנים שלך חייבות להיות גלויות לגמרי"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"הפנים שלך חייבות להיות גלויות לגמרי"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"לא ניתן ליצור את התבנית לזיהוי הפנים. יש לנסות שוב."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"זוהו משקפיים כהים. הפנים שלך חייבות להיות גלויות לגמרי."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"זוהה כיסוי על הפנים. הפנים שלך חייבות להיות גלויות לגמרי."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"לא ניתן לאמת את הפנים. החומרה לא זמינה."</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 72d59a5c8685..5715acdda4ac 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"指紋認証"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"指紋認証センサーを使用できません"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"修理業者に調整を依頼してください。"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"顔を認識できませんでした。もう一度お試しください。"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"顔モデルを作成できません。もう一度お試しください。"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"明るすぎます。もっと暗い場所でお試しください。"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"暗すぎます。もっと明るい場所でお試しください。"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"スマートフォンをもっと離してください。"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"スマートフォンをもっと近づけてください。"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"スマートフォンを上に動かしてください。"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"スマートフォンを下に動かしてください。"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"スマートフォンを左に動かしてください。"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"スマートフォンを右に動かしてください。"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"もっと明るい場所でお試しください"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"スマートフォンをもっと離してください"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"スマートフォンをもっと近づけてください"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"スマートフォンをもっと上げてください"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"スマートフォンをもっと下げてください"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"スマートフォンを左に動かしてください"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"スマートフォンを右に動かしてください"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"もっとまっすぐデバイスに顔を向けてください。"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"顔をスマートフォンの真正面に向けてください。"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"顔を確認できません。スマートフォンを目の高さに合わせて持ってください。"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"あまり動かさないでください。安定させてください。"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"顔を登録し直してください。"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"顔を認識できなくなりました。もう一度お試しください。"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"似すぎています。ポーズを変えてください。"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"顔の向きを少し戻してください。"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"顔を少し傾けてください。"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"顔の向きを少し戻してください。"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"顔を認識できません。もう一度お試しください。"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"顔の位置を少し変えてください"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"もっとまっすぐスマートフォンに顔を向けてください"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"もっとまっすぐスマートフォンに顔を向けてください"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"もっとまっすぐスマートフォンに顔を向けてください"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"顔を隠しているものをすべて外してください"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"黒いバーを含め、画面の上部をきれいにしてください"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"顔が完全に写るようにしてください"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"顔が完全に写るようにしてください"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"顔モデルを作成できません。もう一度お試しください。"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"サングラスが検出されました。顔が完全に写るようにしてください。"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"マスクが検出されました。顔が完全に写るようにしてください。"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"顔を確認できません。ハードウェアを利用できません。"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index d23623d7bde5..9aeb034bc305 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"თითის ანაბეჭდით განბლოკვა"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"თითის ანაბეჭდის სენსორის გამოყენება ვერ ხერხდება"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ეწვიეთ შეკეთების სერვისის პროვაიდერს."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"სახის ზუსტი მონაცემები არ აღიბეჭდა. ცადეთ ხელახლა."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"თქვენი სახის მოდელი ვერ იქმნება. ცადეთ ხელახლა."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"მეტისმეტად ნათელია. ცადეთ უფრო სუსტი განათება."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"მეტისმეტად ბნელია. ცადეთ უფრო ძლიერი განათება."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"გადაანაცვლეთ ტელეფონი უფრო შორს."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"მიიტანეთ ტელეფონი უფრო ახლოს."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"გადაანაცვლეთ ტელეფონი ზემოთ."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"გადაანაცვლეთ ტელეფონი ქვემოთ."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"გადაანაცვლეთ ტელეფონი მარცხნივ."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"გადაანაცვლეთ ტელეფონი მარჯვნივ."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"ცადეთ უფრო ძლიერი განათება"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"გაწიეთ ტელეფონი უფრო შორს"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"მიიტანეთ ტელეფონი უფრო ახლოს"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"აწიეთ ტელეფონი ზემოთ"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ჩაწიეთ ტელეფონი ქვემოთ"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"გაწიეთ ტელეფონი თქვენგან მარცხნივ"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"გაწიეთ ტელეფონი თქვენგან მარჯვნივ"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"გთხოვთ, უფრო პირდაპირ შეხედოთ თქვენს მოწყობილობას."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"დაიჭირეთ სახე უშუალოდ ტელეფონის წინ."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"თქვენი სახე არ ჩანს. დაიჭირეთ ტელეფონი თვალის დონეზე."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"მეტისმეტად მოძრაობთ. მყარად დაიჭირეთ ტელეფონი."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"გთხოვთ, ხელახლა დაარეგისტრიროთ თქვენი სახე."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"სახის ამოცნობა ვეღარ ხერხდება. ცადეთ ხელახლა."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"მეტისმეტად მსგავსია. გთხოვთ, შეცვალოთ პოზა."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"თავი ცოტა ნაკლებად მიაბრუნეთ."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"თავი ცოტა ნაკლებად გადახარეთ."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"თავი ცოტა ნაკლებად მიაბრუნეთ."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"სახის ამოცნობა ვერ ხერხდება. ცადეთ ხელახლა."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"ოდნავ შეცვალეთ თავის პოზიცია"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"პირდაპირ უყურეთ ტელეფონს"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"პირდაპირ უყურეთ ტელეფონს"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"პირდაპირ უყურეთ ტელეფონს"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"მოაშორეთ ყველაფერი, რაც სახეს გიფარავთ."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"გაწმინდეთ ეკრანის ზედა ნაწილი, შავი ზოლის ჩათვლით."</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"თქვენი სახე მთლიანად უნდა ჩანდეს"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"თქვენი სახე მთლიანად უნდა ჩანდეს"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"თქვენი სახის მოდელი ვერ იქმნება. ცადეთ ხელახლა."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"აღმოჩენილია მუქი სათვალე. თქვენი სახე მთლიანად უნდა ჩანდეს."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"აღმოჩენილია სახის დაფარვა. თქვენი სახე მთლიანად უნდა ჩანდეს."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"სახე ვერ დასტურდება. აპარატი მიუწვდომელია."</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 1bff06b90643..c0fae1bc7160 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Құлыпты саусақ ізімен ашу"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Саусақ ізін оқу сканерін пайдалану мүмкін емес"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Жөндеу қызметіне барыңыз."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Бет деректері дұрыс алынбады. Әрекетті қайталаңыз."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Бет үлгісі жасалмады. Қайталап көріңіз."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Тым ашық. Күңгірттеу жарық керек."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Тым қараңғы. Молырақ жарық керек."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Телефонды алшақ ұстаңыз."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Телефонды жақынырақ ұстаңыз."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Телефонды жоғарырақ ұстаңыз."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Телефонды төменірек ұстаңыз."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Телефонды солға жылжытыңыз."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Телефонды оңға жылжытыңыз."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Жарық деңгейін арттырыңыз."</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Телефонды алшақ ұстаңыз."</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Телефонды жақынырақ ұстаңыз."</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонды жоғарырақ ұстаңыз."</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Телефонды төменірек ұстаңыз."</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Телефонды солға қарай ұстаңыз."</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Телефонды оңға қарай ұстаңыз."</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Құрылғының камерасына тура қараңыз."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Бетіңізді телефонға тура қаратыңыз."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Бетіңіз көрінбей тұр. Телефонды көз деңгейінде ұстаңыз."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Қозғалыс тым көп. Телефонды қозғалтпаңыз."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Қайта тіркеліңіз."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Енді бет анықтау мүмкін емес. Әрекетті қайталаңыз."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Алдыңғысына тым ұқсас, басқаша қалыпта түсіңіз."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Басыңызды түзурек ұстаңыз."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Басыңызды түзуірек ұстаңыз."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Басыңызды кішкене бұрыңыз."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Бет танылмады. Қайталап көріңіз."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Басыңыздың қалпын сәл өзгертіңіз."</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Телефонға барынша тура қараңыз."</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Телефонға барынша тура қараңыз."</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Телефонға барынша тура қараңыз."</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Бетіңізді жауып тұрған нәрсені алып тастаңыз."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Экранның жоғарғы жағын, сонымен қатар қара жолақты өшіріңіз."</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Бетіңіз толық көрініп тұруы керек."</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Бетіңіз толық көрініп тұруы керек."</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Бет үлгісі жасалмады. Қайталап көріңіз."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Қою түсті көзілдірік анықталды. Бетіңіз толық көрініп тұруы керек."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Бетперде анықталды. Бетіңіз толық көрініп тұруы керек."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Бетті тану мүмкін емес. Жабдық қолжетімді емес."</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 28bcb257f929..a1310559b724 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ការដោះសោដោយប្រើស្នាមម្រាមដៃ"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"មិនអាចប្រើឧបករណ៍ចាប់ស្នាមម្រាមដៃបានទេ"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ទាក់ទងក្រុមហ៊ុនផ្ដល់ការជួសជុល។"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"មិនអាចថតទិន្នន័យទម្រង់មុខបានត្រឹមត្រូវទេ។ សូមព្យាយាមម្ដងទៀត។"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"មិនអាចបង្កើតគំរូមុខរបស់អ្នកបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"ភ្លឺពេក។ សូមសាកល្បងប្រើពន្លឺស្រាលជាងនេះ។"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"ងងឹតជ្រុល។ សូមសាកល្បងប្រើពន្លឺភ្លឺជាងនេះ។"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"រំកិលទូរសព្ទឱ្យឆ្ងាយជាងមុន។"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ផ្លាស់ទីទូរសព្ទឱ្យជិតជាងមុន។"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ផ្លាស់ទីទូរសព្ទឱ្យខ្ពស់ជាងមុន។"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ផ្លាស់ទីទូរសព្ទឱ្យទាបជាងមុន។"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ផ្លាស់ទីទូរសព្ទទៅខាងឆ្វេង។"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ផ្លាស់ទីទូរសព្ទទៅខាងស្ដាំ។"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"សាកល្បងប្រើពន្លឺភ្លឺជាងនេះ"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ដាក់ទូរសព្ទឱ្យឆ្ងាយជាងមុន"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ដាក់ទូរសព្ទឱ្យជិតជាងមុន"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ដាក់ទូរសព្ទឱ្យខ្ពស់ជាងមុន"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ដាក់ទូរសព្ទឱ្យទាបជាងមុន"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ដាក់ទូរសព្ទទៅខាងឆ្វេងអ្នក"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ដាក់ទូរសព្ទទៅខាងស្ដាំអ្នក"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"សូមមើលឱ្យចំឧបករណ៍របស់អ្នកជាងមុន។"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"បែរមុខរបស់អ្នកឱ្យចំពីមុខទូរសព្ទផ្ទាល់។"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"មើលមិនឃើញមុខរបស់អ្នកទេ។ កាន់ទូរសព្ទរបស់អ្នកដាក់ត្រឹមភ្នែក។"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"មានចលនាខ្លាំងពេក។ សូមកាន់ទូរសព្ទឱ្យនឹង។"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"សូមស្កេនបញ្ចូលមុខរបស់អ្នកម្ដងទៀត។"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"មិនអាចសម្គាល់មុខបានទៀតទេ។ សូមព្យាយាមម្ដងទៀត។"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"ស្រដៀងគ្នាពេក សូមផ្លាស់ប្ដូរកាយវិការរបស់អ្នក។"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"ងាកក្បាលរបស់អ្នកតិចជាងមុនបន្តិច។"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"ផ្អៀងក្បាលរបស់អ្នកតិចជាងនេះបន្តិច។"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"ងាកក្បាលរបស់អ្នកបន្តិចទៀត។"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"មិនអាចសម្គាល់មុខបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"ប្ដូរទីតាំងក្បាលរបស់អ្នកតិចៗ"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"មើលទូរសព្ទរបស់អ្នកឱ្យចំជាងនេះ"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"មើលទូរសព្ទរបស់អ្នកឱ្យចំជាងនេះ"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"មើលទូរសព្ទរបស់អ្នកឱ្យចំជាងនេះ"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"យកអ្វីដែលបាំងមុខរបស់អ្នកចេញ។"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"សម្អាតផ្នែកខាងលើនៃអេក្រង់របស់អ្នក រួមទាំងរបារខ្មៅ"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"មុខរបស់អ្នកត្រូវតែអាចមើលឃើញពេញលេញ"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"មុខរបស់អ្នកត្រូវតែអាចមើលឃើញពេញលេញ"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"មិនអាចបង្កើតគំរូមុខរបស់អ្នកបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"បានរកឃើញវ៉ែនតាខ្មៅ។ មុខរបស់អ្នកត្រូវតែអាចមើលឃើញពេញលេញ។"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"បានរកឃើញគ្រឿងពាក់លើមុខ។ មុខរបស់អ្នកត្រូវតែអាចមើលឃើញពេញលេញ។"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"មិនអាចផ្ទៀងផ្ទាត់មុខបានទេ។ មិនមានហាតវែរទេ។"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index e3f69042e745..46fe03ee6419 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ಲಾಕ್"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ ಅನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ರಿಪೇರಿ ಮಾಡುವವರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"ಸರಿಯಾಗಿ ಮುಖ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಲಾಗಲಿಲ್ಲ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"ಫೇಸ್ ಮಾಡೆಲ್ ರಚಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"ತುಂಬಾ ಪ್ರಕಾಶಮಾನವಾಗಿದೆ ಮಂದ ಪ್ರಕಾಶಮಾನವಿರುವ ಲೈಟ್ ಬಳಸಿ"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"ತುಂಬಾ ಕಪ್ಪು ಛಾಯೆಯಿದೆ. ಪ್ರಕಾಶಮಾನವಾದ ಲೈಟಿಂಗ್ ಬಳಸಿ."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ಫೋನ್ ಅನ್ನು ದೂರಕ್ಕೆ ಸರಿಸಿ."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ಫೋನ್ ಅನ್ನು ಸಮೀಪಕ್ಕೆ ತನ್ನಿ."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ಫೋನ್ ಅನ್ನು ಮೇಲಕ್ಕೆ ಎತ್ತಿ ಹಿಡಿಯಿರಿ."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ಫೋನ್ ಅನ್ನು ಕೆಳಗೆ ಸರಿಸಿ."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ಫೋನ್ ಅನ್ನು ಎಡಕ್ಕೆ ಸರಿಸಿ."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ಫೋನ್ ಅನ್ನು ಬಲಕ್ಕೆ ಸರಿಸಿ."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"ಪ್ರಕಾಶಮಾನವಾದ ಲೈಟಿಂಗ್ ಬಳಸಿ"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ಫೋನ್ ಅನ್ನು ದೂರಕ್ಕೆ ಸರಿಸಿ"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ಫೋನ್ ಅನ್ನು ಸಮೀಪಕ್ಕೆ ತನ್ನಿ"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ಫೋನ್ ಅನ್ನು ಮೇಲಕ್ಕೆ ಎತ್ತಿ ಹಿಡಿಯಿರಿ."</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ಫೋನ್ ಅನ್ನು ಕೆಳಗೆ ಸರಿಸಿ"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ಫೋನ್ ಅನ್ನು ನಿಮ್ಮ ಎಡಕ್ಕೆ ಸರಿಸಿ"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ಫೋನ್ ಅನ್ನು ನಿಮ್ಮ ಬಲಕ್ಕೆ ಸರಿಸಿ"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಹೆಚ್ಚಿನದ್ದನ್ನು ನೇರವಾಗಿ ನೋಡಿ."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"ನಿಮ್ಮ ಮುಖವನ್ನು ಫೋನ್ಗೆ ನೇರವಾಗಿ ಇರಿಸಿ."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"ನಿಮ್ಮ ಮುಖ ಕಾಣಿಸುತ್ತಿಲ್ಲ. ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಕಣ್ಣಿನ ನೇರಕ್ಕೆ ಹಿಡಿದುಕೊಳ್ಳಿ."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"ತುಂಬಾ ಅಲುಗಾಡುತ್ತಿದೆ ಫೋನ್ ಅನ್ನು ಸ್ಥಿರವಾಗಿ ಹಿಡಿಯಿರಿ."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"ನಿಮ್ಮ ಮುಖವನ್ನು ಮರುನೋಂದಣಿ ಮಾಡಿ."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"ಮುಖ ಗುರುತಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"ತುಂಬಾ ಸಮಾನ, ನಿಮ್ಮ ಪೋಸ್ ಬದಲಾಯಿಸಿ."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"ನಿಮ್ಮ ತಲೆಯನ್ನು ಹೆಚ್ಚು ತಿರುಗಿಸಬೇಡಿ."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"ನಿಮ್ಮ ತಲೆಯನ್ನು ಸ್ವಲ್ಪ ಓರೆಯಾಗಿಸಿ."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"ನಿಮ್ಮ ತಲೆಯನ್ನು ಸ್ವಲ್ಪ ಕಡಿಮೆ ತಿರುಗಿಸಿ."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"ಮುಖ ಗುರುತಿಸಲಾಗುತ್ತಿಲ್ಲ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"ನಿಮ್ಮ ತಲೆಯ ಸ್ಥಾನವನ್ನು ಸ್ವಲ್ಪ ಬದಲಾಯಿಸಿ"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೇರವಾಗಿ ನೋಡಿ"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೇರವಾಗಿ ನೋಡಿ"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೇರವಾಗಿ ನೋಡಿ"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"ನಿಮ್ಮ ಮುಖವನ್ನು ಮರೆಮಾಡುವ ಯಾವುದನ್ನಾದರೂ ತೆಗೆದುಹಾಕಿ."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ಬ್ಲ್ಯಾಕ್ ಬಾರ್ ಸೇರಿದಂತೆ ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ನ ಮೇಲ್ಭಾಗವನ್ನು ತೆರವುಗೊಳಿಸಿ"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ನಿಮ್ಮ ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ನಿಮ್ಮ ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ಫೇಸ್ ಮಾಡೆಲ್ ರಚಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ಕಪ್ಪು ಕನ್ನಡಕ ಪತ್ತೆಯಾಗಿದೆ. ನಿಮ್ಮ ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ಮುಖವಾಡ ಪತ್ತೆಯಾಗಿದೆ. ನಿಮ್ಮ ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"ಮುಖ ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಹಾರ್ಡ್ವೇರ್ ಲಭ್ಯವಿಲ್ಲ."</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 98b2fa978ffe..03a1f61e59e4 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"지문 잠금 해제"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"지문 센서를 사용할 수 없음"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"수리업체에 방문하세요."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"정확한 얼굴 데이터를 캡처하지 못했습니다. 다시 시도하세요."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"얼굴 모델을 만들 수 없습니다. 다시 시도해 주세요."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"너무 밝습니다. 조명 밝기를 조금 낮춰보세요."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"너무 어둡습니다. 조명을 밝게 해 보세요."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"휴대전화를 더 멀리 위치시키세요."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"휴대전화를 더 가깝게 위치시키세요."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"휴대전화를 위쪽으로 이동하세요."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"휴대전화를 아래로 이동하세요"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"휴대전화를 왼쪽으로 이동하세요."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"휴대전화를 오른쪽으로 이동하세요."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"조명을 밝게 해 보세요."</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"휴대전화를 얼굴에서 더 멀리 떨어뜨려 주세요."</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"휴대전화를 얼굴에 더 가까이 가져와 주세요."</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"휴대전화를 위로 이동하세요"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"휴대전화를 아래로 이동하세요"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"휴대전화를 왼쪽으로 이동하세요"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"휴대전화를 오른쪽으로 이동하세요"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"기기에서 더 똑바로 바라보세요."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"휴대전화가 얼굴 정면을 향하도록 두세요."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"얼굴이 보이지 않습니다. 눈높이에 맞춰 휴대전화를 들어 주세요."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"너무 많이 움직였습니다. 휴대전화를 흔들리지 않게 잡으세요."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"얼굴을 다시 등록해 주세요."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"더 이상 얼굴을 인식할 수 없습니다. 다시 시도하세요."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"너무 비슷합니다. 다른 포즈를 취해 보세요."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"고개를 조금 덜 돌려 보세요."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"고개를 조금 덜 기울여 보세요."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"고개를 조금 덜 돌려 보세요."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"얼굴을 인식할 수 없습니다. 다시 시도해 주세요."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"얼굴의 위치를 조금 변경해 주세요."</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"휴대전화를 좀 더 똑바로 바라봐 주세요."</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"휴대전화를 좀 더 똑바로 바라봐 주세요."</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"휴대전화를 좀 더 똑바로 바라봐 주세요."</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"얼굴이 가려지지 않도록 해 주세요."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"검은색 바를 포함한 화면 상단을 청소하세요."</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"전체 얼굴이 보여야 합니다."</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"전체 얼굴이 보여야 합니다."</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"얼굴 모델을 만들 수 없습니다. 다시 시도해 주세요."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"선글라스가 감지되었습니다. 전체 얼굴이 보여야 합니다."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"마스크가 감지되었습니다. 전체 얼굴이 보여야 합니다."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"얼굴을 확인할 수 없습니다. 하드웨어를 사용할 수 없습니다."</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index d8e20a073311..048149bfea70 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Кулпуланган түзмөктү манжа изи менен ачуу"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Манжа изинин сенсорун колдонууга болбойт"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Тейлөө кызматына кайрылыңыз."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Жүзүңүз жакшы тартылган жок. Кайталап көрүңүз."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Жүзүңүздүн үлгүсү түзүлгөн жок. Кайталаңыз."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Өтө жарык. Жарыктыкты азайтып көрүңүз."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Өтө караңгы. Жарыгыраак жерге туруңуз."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Телефонду алыстатыңыз."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Телефонду жакындатыңыз."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Телефонду өйдө жылдырыңыз."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Телефонду ылдый жылдырыңыз."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Телефонду солго жылдырыңыз."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Телефонду оңго жылдырыңыз."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Жарыгыраак жерге туруңуз"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Телефонду алыстатыңыз"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Телефонду жакындатыңыз"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонду жогору жылдырыңыз"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Телефонду ылдый жылдырыңыз"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Телефонду солго жылдырыңыз"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Телефонду оңго жылдырыңыз"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Түзмөгүңүзгө түз караңыз."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Телефонду жүзүңүздүн маңдайында кармаңыз."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Жүзүңүз көрүнбөй жатат. Телефонду көздөрүңүздүн деңгээлинде кармаңыз."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Кыймылдап жибердиңиз. Телефонду түз кармаңыз."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Жүзүңүздү кайра таанытыңыз."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Жүз таанылган жок. Кайталап көрүңүз."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Мурункуга окшош болуп калды, башкача туруңуз."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Башыңызды бир аз гана эңкейтиңиз."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Башыңызды бир аз гана эңкейтиңиз."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Башыңызды бир аз гана эңкейтиңиз."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Жүз таанылбай жатат. Кайталаңыз."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Башыңызды бир аз буруңуз"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Телефонуңузду караңыз"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Телефонуңузду караңыз"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Телефонуңузду караңыз"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Жүзүңүз жакшы көрүнбөй жатат."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Экраныңыздын жогору жагын, анын ичинде тилкени да тазалаңыз"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Жүзүңүз толук көрүнүшү керек"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Жүзүңүз толук көрүнүшү керек"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Жүзүңүздүн үлгүсү түзүлгөн жок. Кайталаңыз."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Кара көз айнек кийгенге болбойт. Жүзүңүз толук көрүнүшү керек."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Жүзүңүз жабылып калды. Ал толук көрүнүшү керек."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Жүз ырасталбай жатат. Аппараттык камсыздоо жеткиликсиз."</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index aa99ef19eb04..e4b34b19d1c2 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ປົດລັອກດ້ວຍລາຍນິ້ວມື"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"ບໍ່ສາມາດໃຊ້ເຊັນເຊີລາຍນິ້ວມືໄດ້"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ກະລຸນາໄປຫາຜູ້ໃຫ້ບໍລິການສ້ອມແປງ."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"ບໍ່ສາມາດບັນທຶກຂໍ້ມູນໃບໜ້າທີ່ຖືກຕ້ອງໄດ້. ກະລຸນາລອງໃໝ່."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"ບໍ່ສາມາດສ້າງຮູບແບບໃບໜ້າຂອງທ່ານໄດ້. ກະລຸນາລອງໃໝ່."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"ແຈ້ງເກີນໄປ. ລອງຄ່ອຍແສງໄຟລົງ."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"ມືດເກີນ. ກະລຸນາລອງໃຊ້ສະພາບແສງທີ່ແຈ້ງຂຶ້ນ."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ຍ້າຍໂທລະສັບອອກໄປໄກຂຶ້ນ."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ຍ້າຍໂທລະສັບເຂົ້າໄປໃກ້ຂຶ້ນ."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ຍົກໂທລະສັບໃຫ້ສູງຂຶ້ນ."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ເລື່ອນໂທລະສັບຕ່ຳລົງ."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ຍ້າຍໂທລະສັບໄປທາງຊ້າຍ."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ຍ້າຍໂທລະສັບໄປທາງຂວາ."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"ກະລຸນາລອງໃຊ້ສະພາບແສງທີ່ແຈ້ງຂຶ້ນ"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ເລື່ອນໂທລະສັບອອກໄປໄກຂຶ້ນ"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ເລື່ອນໂທລະສັບເຂົ້າໄປໃກ້ຂຶ້ນ"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ຍົກໂທລະສັບໃຫ້ສູງຂຶ້ນ"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ເລື່ອນໂທລະສັບຕ່ຳລົງ"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ເລື່ອນໂທລະສັບໄປທາງຊ້າຍຂອງທ່ານ"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ເລື່ອນໂທລະສັບໄປທາງຂວາຂອງທ່ານ"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"ກະລຸນາເບິ່ງອຸປະກອນຂອງທ່ານໃຫ້ຊື່ໆ."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"ຫັນໜ້າຂອງທ່ານໄປໃສ່ໜ້າໂທລະສັບໂດຍກົງ."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"ບໍ່ເຫັນໃບໜ້າຂອງທ່ານ. ຖືໂທລະສັບຂອງທ່ານໄວ້ໃນລະດັບສາຍຕາ."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"ເຄື່ອນໄຫວຫຼາຍເກີນໄປ. ກະລຸນາຖືໂທລະສັບໄວ້ຊື່ໆ."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"ກະລຸນາລົງທະບຽນອຸປະກອນຂອງທ່ານອີກເທື່ອໜຶ່ງ."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"ບໍ່ສາມາດຈຳແນກໃບໜ້າໄດ້ອີກຕໍ່ໄປ. ກະລຸນາລອງໃໝ່."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"ຄ້າຍກັນເກີນໄປ, ກະລຸນາປ່ຽນທ່າຂອງທ່ານ."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"ອຽງຫົວຂອງທ່ານໜ້ອຍໜຶ່ງ."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"ປັບມຸມໜ້າຂອງທ່ານໃຫ້ຕັ້ງຊື່."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"ອຽງຫົວຂອງທ່ານໜ້ອຍໜຶ່ງ."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"ບໍ່ສາມາດຈຳແນກໃບໜ້າໄດ້. ກະລຸນາລອງໃໝ່."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"ປ່ຽນຕຳແໜ່ງຂອງຫົວທ່ານເລັກນ້ອຍ"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"ເບິ່ງຊື່ໆໄປຫາໂທລະສັບຂອງທ່ານໃຫ້ຫຼາຍຂຶ້ນ"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"ເບິ່ງຊື່ໆໄປຫາໂທລະສັບຂອງທ່ານໃຫ້ຫຼາຍຂຶ້ນ"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ເບິ່ງຊື່ໆໄປຫາໂທລະສັບຂອງທ່ານໃຫ້ຫຼາຍຂຶ້ນ"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"ນຳສິ່ງທີ່ກີດຂວາງໃບໜ້າທ່ານອອກ."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ທຳຄວາມສະອາດສ່ວນເທິງສຸດຂອງໜ້າຈໍທ່ານ, ຮວມທັງແຖບດຳນຳ"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ໃບໜ້າຂອງທ່ານຕ້ອງສະແດງໃຫ້ເຫັນໝົດ"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ໃບໜ້າຂອງທ່ານຕ້ອງສະແດງໃຫ້ເຫັນໝົດ"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ບໍ່ສາມາດສ້າງຮູບແບບໃບໜ້າຂອງທ່ານໄດ້. ກະລຸນາລອງໃໝ່."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ກວດພົບແວ່ນຕາດຳ. ໃບໜ້າຂອງທ່ານຕ້ອງສະແດງໃຫ້ເຫັນໝົດ."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ກວດພົບການປົກປິດໃບໜ້າ. ໃບໜ້າຂອງທ່ານຕ້ອງສະແດງໃຫ້ເຫັນໝົດ."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"ບໍ່ສາມາດຢັ້ງຢືນໃບໜ້າໄດ້. ບໍ່ມີຮາດແວໃຫ້ໃຊ້."</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 0b368facd99c..dfa4b57d2405 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -636,26 +636,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Atrakinimas kontroliniu kodu"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Negalima naudoti kontrolinio kodo jutiklio"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Apsilankykite pas taisymo paslaugos teikėją."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Neužfiks. tikslūs veido duom. Bandykite dar kartą."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Nepavyko sukurti veido modelio. Band. dar kartą."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Per šviesu. Išbandykite mažesnį apšvietimą."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Per tamsu. Išbandykite šviesesnį apšvietimą."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Laikykite telefoną toliau."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Laikykite telefoną arčiau."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Laikykite telefoną aukščiau."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Laikykite telefoną žemiau."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Pasukite telefoną kairėn."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Pasukite telefoną dešinėn."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Išbandykite šviesesnį apšvietimą"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Laikykite telefoną toliau"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Laikykite telefoną arčiau"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Laikykite telefoną aukščiau"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Laikykite telefoną žemiau"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Laikykite telefoną kairiau"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Laikykite telefoną dešiniau"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Žiūrėkite tiesiai į įrenginį."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Veidas turi būti prieš telefoną."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Nepavyko pamatyti jūsų veido. Laikykite telefoną akių lygyje."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Įrenginys per daug judinamas. Nejudink. telefono."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Užregistruokite veidą iš naujo."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Nebegalima atpažinti veido. Bandykite dar kartą."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Per daug panašu, pakeiskite veido išraišką."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Nesukite tiek galvos."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Pakreipkite galvą šiek tiek mažiau."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Nesukite tiek galvos."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Veidas neatpažintas. Bandykite dar kartą."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Kaskart šiek tiek pakeiskite galvos poziciją"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Žiūrėkite tiesiai į telefoną"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Žiūrėkite tiesiai į telefoną"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Žiūrėkite tiesiai į telefoną"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Patraukite viską, kas užstoja jūsų veidą."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Išvalykite ekrano viršų, įskaitant juodą juostą"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Veidas turi būti visas matomas"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Veidas turi būti visas matomas"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nepavyko sukurti veido modelio. Band. dar kartą."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Aptikti akiniai nuo saulės. Visas veidas turi būti matomas."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Aptikta veido kaukė. Visas veidas turi būti matomas."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Nepavyko patv. veido. Aparatinė įranga negalima."</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 4d57390d3baa..bad52d4ab45e 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -635,26 +635,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Autorizācija ar pirksta nospiedumu"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Nevar izmantot pirksta nospieduma sensoru"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Sazinieties ar remonta pakalpojumu sniedzēju."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Neizdevās tvert sejas datus. Mēģiniet vēlreiz."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Nevar izveidot sejas modeli. Mēģiniet vēlreiz."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Pārāk spilgts. Izmēģiniet maigāku apgaismojumu."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Pārāk tumšs. Izmēģiniet spožāku apgaismojumu."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Pārvietojiet tālruni tālāk."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Pārvietojiet tālruni tuvāk."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Paceliet tālruni augstāk."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Nolaidiet tālruni zemāk"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Pārvietojiet tālruni pa kreisi."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Pārvietojiet tālruni pa labi."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Izmēģiniet spožāku apgaismojumu"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Pārvietojiet tālruni tālāk."</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Pārvietojiet tālruni tuvāk."</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Paceliet tālruni augstāk."</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Nolaidiet tālruni zemāk."</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Pārvietojiet tālruni pa kreisi."</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Pārvietojiet tālruni pa labi."</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Lūdzu, tiešāk skatieties uz savu ierīci."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Novietojiet savu seju tieši pretī tālrunim."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Seja nav redzama. Turiet tālruni acu līmenī."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Pārāk daudz kustību. Nekustīgi turiet tālruni."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Lūdzu, atkārtoti reģistrējiet savu seju."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Seju vairs nevar atpazīt. Mēģiniet vēlreiz."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Pārāk līdzīgi. Lūdzu, mainiet pozu."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Pagrieziet galvu nedaudz mazāk."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Nedaudz mazāk nolieciet galvu."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Pagrieziet galvu nedaudz mazāk."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Nevar atpazīt seju. Mēģiniet vēlreiz."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Nedaudz mainiet galvas pozīciju."</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Skatieties tieši uz tālruni"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Skatieties tieši uz tālruni"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Skatieties tieši uz tālruni"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Noņemiet visu, kas aizsedz jūsu seju."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Notīriet ekrāna augšdaļu, tostarp melno joslu."</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Sejai ir jābūt pilnībā redzamai"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Sejai ir jābūt pilnībā redzamai"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nevar izveidot sejas modeli. Mēģiniet vēlreiz."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Konstatētas tumšas brilles. Sejai ir jābūt pilnībā redzamai."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Konstatēts sejas aizsegs. Sejai ir jābūt pilnībā redzamai."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Nevar verificēt seju. Aparatūra nav pieejama."</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index 040f50301cf2..87186350faea 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Отклучување со отпечаток на прст"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Не може да се користи сензорот за отпечатоци"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Однесете го на поправка."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Не се сними прецизна слика. Обидете се повторно."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Не може да создаде модел на лик. Обидете се пак."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Премногу светла. Пробајте со послабо осветлување."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Премногу темна. Пробајте со посилно осветлување."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Оддалечете го телефонот."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Доближете го телефонот."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Поткренете го телефонот."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Снижете го телефонот."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Поместете го телефонот налево."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Поместете го телефонот надесно."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Пробајте со посилно осветлување"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Оддалечете го телефонот"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Доближете го телефонот"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Кренете го телефонот погоре"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Спуштете го телефонот подолу"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Поместете го телефонот налево"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Поместете го телефонот надесно"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Погледнете подиректно во уредот."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Наместете го лицето директно пред телефонот."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Не ви се гледа лицето. Држете го телефонот во висина на очите."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Премногу движење. Држете го телефонот стабилно."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Повторно регистрирајте го лицето."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Ликот не се препознава. Обидете се повторно."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Премногу слично, сменете ја позата."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Не вртете ја главата толку многу."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Не навалувајте ја главата толку многу."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Не вртете ја главата толку многу."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Не се препознава ликот. Обидете се пак."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Малку сменете ја положбата на главата"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Гледајте подиректно во телефонот"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Гледајте подиректно во телефонот"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Гледајте подиректно во телефонот"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Отстранете ги работите што ви го покриваат лицето."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Исчистете го врвот на екранот, вклучувајќи ја црната лента"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Лицето мора да ви се гледа целосно"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Лицето мора да ви се гледа целосно"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Не може да создаде модел на лик. Обидете се пак."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Носите темни очила. Лицето мора да ви се гледа целосно."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Лицето е покриено. Лицето мора да ви се гледа целосно."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Ликот не може да се потврди. Хардвер - недостапен."</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index 199481d15e18..b9a6fe9538dd 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ഫിംഗർപ്രിന്റ് അൺലോക്ക്"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"വിരലടയാള സെൻസർ ഉപയോഗിക്കാനാകുന്നില്ല"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"റിപ്പയർ കേന്ദ്രം സന്ദർശിക്കുക."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"കൃത്യ മുഖ ഡാറ്റ എടുക്കാനായില്ല. വീണ്ടും ശ്രമിക്കൂ."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"മുഖ മോഡൽ സൃഷ്ടിക്കാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കൂ."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"വളരെയധികം തെളിച്ചം. സൗമ്യതയേറിയ പ്രകാശം ശ്രമിക്കൂ."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"വളരെ ഇരുണ്ടത്. തിളക്കമേറിയ ലൈറ്റിംഗ് പരീക്ഷിക്കുക."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ഫോൺ കൂടുതൽ അകലേയ്ക്ക് നീക്കുക."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ഫോൺ അടുത്തേക്ക് നീക്കുക."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ഫോൺ മുകളിലേക്ക് ഉയർത്തുക"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ഫോൺ കൂടുതൽ താഴേക്ക് നീക്കുക."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ഫോൺ ഇടത്തോട്ട് നീക്കുക."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ഫോൺ വലത്തോട്ട് നീക്കുക."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"കൂടുതൽ വെളിച്ചമുള്ളയിടത്ത് പരീക്ഷിച്ച് നോക്കൂ"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ഫോൺ കൂടുതൽ ദൂരേയ്ക്ക് നീക്കുക"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ഫോൺ അടുത്തേക്ക് നീക്കുക"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ഫോൺ മുകളിലേക്ക് ഉയർത്തുക"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ഫോൺ കൂടുതൽ താഴേക്ക് നീക്കുക"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ഫോൺ നിങ്ങളുടെ ഇടതുവശത്തേക്ക് നീക്കുക"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ഫോൺ നിങ്ങളുടെ വലതുവശത്തേക്ക് നീക്കുക"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"നിങ്ങളുടെ ഉപകരണത്തിന് നേരെ കൂടുതൽ നന്നായി നോക്കുക."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"നിങ്ങളുടെ മുഖം ക്യാമറയ്ക്ക് നേരെയാക്കുക."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"നിങ്ങളുടെ മുഖം കാണാനാകുന്നില്ല. നിങ്ങളുടെ ഫോൺ കണ്ണിന് നേരെ പിടിക്കുക."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"വളരെയധികം ചലനം. ഫോൺ അനക്കാതെ നേരെ പിടിക്കുക."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"നിങ്ങളുടെ മുഖം വീണ്ടും എൻറോൾ ചെയ്യുക."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"ഇനി മുഖം തിരിച്ചറിയാനാവില്ല. വീണ്ടും ശ്രമിക്കൂ."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"വളരെയധികം സമാനത, നിങ്ങളുടെ പോസ് മാറ്റുക."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"നിങ്ങളുടെ തല ഇത്ര തിരിക്കേണ്ട."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"നിങ്ങളുടെ തല ചെറുതായി ടിൽറ്റ് ചെയ്യുക."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"നിങ്ങളുടെ തല ഇത്ര തിരിക്കേണ്ട."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"മുഖം തിരിച്ചറിയാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കൂ."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"നിങ്ങളുടെ തലയുടെ സ്ഥാനം ചെറുതായി മാറ്റുക"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"കൂടുതൽ കൃത്യമായി ഫോണിന് നേരെ നോക്കുക"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"കൂടുതൽ കൃത്യമായി ഫോണിന് നേരെ നോക്കുക"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"കൂടുതൽ കൃത്യമായി ഫോണിന് നേരെ നോക്കുക"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"നിങ്ങളുടെ മുഖം മറയ്ക്കുന്നത് എല്ലാം നീക്കം ചെയ്യൂ."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"കറുപ്പ് ബാർ ഉൾപ്പെടെ നിങ്ങളുടെ സ്ക്രീനിന്റെ മുകൾഭാഗം വൃത്തിയാക്കുക"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"നിങ്ങളുടെ മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"നിങ്ങളുടെ മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"മുഖ മോഡൽ സൃഷ്ടിക്കാനാകില്ല. വീണ്ടും ശ്രമിക്കൂ."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"കറുത്ത കണ്ണട കണ്ടെത്തി. നിങ്ങളുടെ മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"മുഖം മറച്ചിരിക്കുന്നതായി കണ്ടെത്തി. നിങ്ങളുടെ മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"മുഖം പരിശോധിക്കാൻ കഴിയില്ല. ഹാർഡ്വെയർ ലഭ്യമല്ല."</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index e0d78ef3f7d9..eaaed00b1bbf 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Хурууны хээгээр түгжээ тайлах"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Хурууны хээ мэдрэгч ашиглах боломжгүй"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Засварын үйлчилгээ үзүүлэгчид зочилно уу."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Царайн өгөгдлийг зөв авч чадсангүй. Дахин оролдоно уу."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Нүүрний загвар үүсгэж чадсангүй. Дахин оролдоно уу."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Хэт цайвар байна. Гэрэл багатай газар оролдоно уу."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Хэт харанхуй байна. Гэрэлтэй орчинд туршина уу."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Утсаа холдуулна уу."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Утсаа ойртуулна уу."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Утсаа дээшлүүлнэ үү."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Утсаа доошлуулна уу."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Утсаа зүүн тийш болгоно уу."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Утсаа баруун тийш болгоно уу."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Гэрэлтэй орчинд туршина уу"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Утсаа холдуулна уу"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Утсаа ойртуулна уу"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Утсаа дээшлүүлнэ үү"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Утсаа доошлуулна уу"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Утсаа зүүн тийш болгоно уу"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Утсаа баруун тийш болгоно уу"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Төхөөрөмж рүүгээ аль болох эгц харна уу."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Царайгаа утасны урд эгц байрлуулна уу"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Таны царай харагдахгүй байна. Утсаа нүднийхээ түвшинд барина уу."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Хэт их хөдөлгөөнтэй байна. Утсаа хөдөлгөөнгүй барина уу."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Нүүрээ дахин бүртгүүлнэ үү."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Царайг таних боломжгүй боллоо. Дахин оролдоно уу."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Хэт адилхан байгаа тул байрлалаа өөрчилнө үү."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Толгойгоо арай багаар эргүүлнэ үү."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Толгойгоо арай бага хазайлгана уу."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Толгойгоо арай багаар эргүүлнэ үү."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Царайг танихгүй байна. Дахин оролдоно уу."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Толгойныхоо байрлалыг бага зэрэг өөрчилнө үү"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Утас руугаа аль болох эгц харна уу"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Утас руугаа аль болох эгц харна уу"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Утас руугаа аль болох эгц харна уу"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Таны нүүрийг далдалж буй аливаа зүйлийг хасна уу."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Хар хэсэг зэрэг дэлгэцийнхээ дээд хэсгийг цэвэрлэнэ үү"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Таны нүүр бүтэн харагдах ёстой"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Таны нүүр бүтэн харагдах ёстой"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Нүүрний загвар үүсгэж чадсангүй. Дахин оролдоно уу."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Хар шил илэрлээ. Таны нүүр бүтэн харагдах ёстой."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Нүүрний халхавч илэрлээ. Таны нүүр бүтэн харагдах ёстой."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Царайг бататгаж чадсангүй. Техник хангамж боломжгүй байна."</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index 6b8819e99624..990f5255940c 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"फिंगरप्रिंट अनलॉक"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"फिंगरप्रिंट सेन्सर वापरू शकत नाही"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"दुरुस्तीच्या सेवा पुरवठादाराला भेट द्या."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"अचूक फेस डेटा कॅप्चर करता आला नाही. पुन्हा करा."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"फेस मॉडेल तयार करू शकत नाही. पुन्हा प्रयत्न करा."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"खूप प्रखर. आणखी सौम्य प्रकाश वापरून पहा."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"खूप गडद. आणखी प्रखर प्रकाश वापरून पहा."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"फोन आणखी दूर हलवा"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"फोन आणखी जवळ हलवा."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"फोन आणखी वर हलवा."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"फोन आणखी खाली हलवा."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"फोन डावीकडे हलवा."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"फोन उजवीकडे हलवा."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"आणखी प्रखर प्रकाश वापरून पहा"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"फोन आणखी दूर हलवा"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"फोन आणखी जवळ हलवा"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"फोन आणखी वर हलवा"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"फोन आणखी खाली हलवा"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"फोन तुमच्या डावीकडे हलवा"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"फोन तुमच्या उजवीकडे हलवा"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"कृपया तुमच्या डिव्हाइसकडे थेट पहा"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"तुमचा चेहरा थेट फोन समोर आणा."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"तुमचा चेहरा दिसत नाही. तुमचा फोन डोळ्याच्या पातळीवर धरा."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"खूप हलत आहे. फोन स्थिर धरून ठेवा."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"कृपया तुमच्या चेहऱ्याची पुन्हा नोंदणी करा."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"चेहरा ओळखू शकत नाही. पुन्हा प्रयत्न करा."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"एकाच प्रकारची पोझ देत आहात कृपया तुमची पोझ बदला."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"तुमचे डोके थोडे कमी फिरवा."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"तुमचे डोके थोडे कमी तिरपे करा."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"तुमचे डोके थोडे कमी फिरवा."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"चेहरा ओळखू शकत नाही. पुन्हा प्रयत्न करा."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"तुमच्या डोक्याचे स्थान किंचित बदला"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"तुमच्या फोनकडे आणखी थेट पहा"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"तुमच्या फोनकडे आणखी थेट पहा"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"तुमच्या फोनकडे आणखी थेट पहा"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"तुमचा चेहरा लपवणारे काहीही काढून टाका."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ब्लॅक बार सह तुमच्या स्क्रीनची वरची बाजू साफ करा"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"तुमचा चेहरा पूर्णपणे दृश्यमान असणे आवश्यक आहे"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"तुमचा चेहरा पूर्णपणे दृश्यमान असणे आवश्यक आहे"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"फेस मॉडेल तयार करू शकत नाही. पुन्हा प्रयत्न करा."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"गडद चष्मा डिटेक्ट केला. तुमचा चेहरा पूर्णपणे दृश्यमान असणे आवश्यक आहे."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"चेहर्यावरील आच्छादन डिटेक्ट केले. तुमचा चेहरा पूर्णपणे दृश्यमान असणे आवश्यक आहे."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"चेहरा पडताळू शकत नाही. हार्डवेअर उपलब्ध नाही."</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index f1b9498f444a..b9790a60d6a4 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Buka Kunci Cap Jari"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Tidak boleh menggunakan penderia cap jari"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Lawati penyedia pembaikan."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Gagal menangkap data wajah dgn tepat. Cuba lagi."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Tidak dapat membuat model wajah anda. Cuba lagi."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Terlalu terang. Cuba pencahayaan yang lebih lembut."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Terlalu gelap. Cuba pencahayaan yang lebih cerah."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Jauhkan telefon."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Dekatkan telefon."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Tinggikan lagi telefon."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Rendahkan lagi telefon."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Alihkan telefon ke kiri."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Alihkan telefon ke kanan."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Cuba pencahayaan yang lebih cerah"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Jauhkan telefon"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Dekatkan telefon"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Tinggikan lagi telefon"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Rendahkan lagi telefon"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Gerakkan telefon ke kiri anda"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Gerakkan telefon ke kanan anda"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Sila lihat terus pada peranti anda."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Letakkan wajah anda betul-betul di depan telefon."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Gagal mengesan wajah anda. Pegang telefon anda pada paras mata."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Terlalu bnyk gerakan. Pegang telefon dgn stabil."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Sila daftarkan semula wajah anda."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Tidak lagi dapat mengecam wajah. Cuba lagi."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Terlalu serupa, sila ubah lagak gaya anda."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Pusingkan kepala anda kurang sedikit."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Sengetkan kepala anda kurang sedikit."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Pusingkan kepala anda kurang sedikit."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Tidak dapat mengecam wajah. Cuba lagi."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Tukar sedikit kedudukan kepala anda"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Lihat terus pada telefon anda"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Lihat terus pada telefon anda"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Lihat terus pada telefon anda"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Alih keluar apa-apa yang melindungi wajah anda."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Bersihkan bahagian atas skrin anda, termasuk bar hitam"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Wajah anda mesti terlihat sepenuhnya"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Wajah anda mesti terlihat sepenuhnya"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Tidak dapat membuat model wajah anda. Cuba lagi."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Cermin mata gelap dikesan. Wajah anda mesti terlihat sepenuhnya."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Pelitup muka dikesan. Wajah anda mesti terlihat sepenuhnya."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Tdk dpt sahkan wajah. Perkakasan tidak tersedia."</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index 2a114821fa79..6deb7c6e53ec 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်း"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"လက်ဗွေ အာရုံခံကိရိယာကို အသုံးပြု၍ မရပါ"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ပြုပြင်ရေး ဝန်ဆောင်မှုပေးသူထံသို့ သွားပါ။"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"မျက်နှာဒေတာ အမှန် မရိုက်ယူနိုင်ပါ၊ ထပ်စမ်းကြည့်ပါ။"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"သင့်မျက်နှာနမူနာ ပြုလုပ်၍မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"အလွန် လင်းသည်။ အလင်းလျှော့ကြည့်ပါ။"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"အလွန်မှောင်သည်။ ပိုလင်းအောင် လုပ်ကြည့်ပါ။"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ဖုန်းကို အဝေးသို့ခွာပါ။"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ဖုန်းကို အနားသို့ ပိုတိုးပါ။"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ဖုန်းကို ပိုမြှင့်လိုက်ပါ။"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ဖုန်းကို အောက်ပိုနှိမ့်ပါ။"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ဖုန်းကို ဘယ်ဘက်သို့ရွှေ့ပါ။"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ဖုန်းကို ညာဘက်သို့ ရွှေ့ပါ။"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"ပိုလင်းအောင် လုပ်ကြည့်ပါ"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ဖုန်းကို အဝေးသို့ခွာပါ"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ဖုန်းကို အနားသို့ပိုတိုးပါ"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ဖုန်းကို ပိုမြှင့်လိုက်ပါ"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ဖုန်းကို အောက်ပိုနှိမ့်ပါ"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ဖုန်းကို သင့်ဘယ်ဘက်သို့ ရွှေ့ပါ"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ဖုန်းကို သင့်ညာဘက်သို့ ရွှေ့ပါ"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"သင့်စက်ပစ္စည်းကို တည့်တည့်ကြည့်ပါ။"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"မျက်နှာကို ဖုန်းရှေ့တွင် တည့်အောင်ထားပါ။"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"သင့်မျက်နှာကို မမြင်ရပါ။ ဖုန်းကို မျက်လုံးနှင့် တစ်တန်းတည်းထား၍ ကိုင်ပါ။"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"လှုပ်လွန်းသည်။ ဖုန်းကို ငြိမ်ငြိမ်ကိုင်ပါ။"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"သင့်မျက်နှာကို ပြန်စာရင်းသွင်းပါ။"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"မျက်နှာ မမှတ်သားနိုင်တော့ပါ။ ထပ်စမ်းကြည့်ပါ။"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"ဆင်တူနေသည်၊ အမူအရာ ပြောင်းပါ။"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"ခေါင်းကို သိပ်မလှည့်ပါနှင့်။"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"သင့်ခေါင်းကို သိပ်မလှည့်ပါနှင့်။"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"ခေါင်းကို သိပ်မလှည့်ပါနှင့်။"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"မျက်နှာကို မသိပါ။ ထပ်စမ်းကြည့်ပါ။"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"ခေါင်းအနေအထားကို အနည်းငယ်ပြောင်းပါ"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"သင့်ဖုန်းကို တည့်တည့်ကြည့်ပါ"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"သင့်ဖုန်းကို တည့်တည့်ကြည့်ပါ"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"သင့်ဖုန်းကို တည့်တည့်ကြည့်ပါ"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"သင့်မျက်နှာကို ကွယ်နေသည့်အရာအားလုံး ဖယ်ပါ။"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"အနက်ရောင်ဘားအပါအဝင် ဖန်သားပြင်ထိပ်ကို သန့်ရှင်းရေး လုပ်ပါ"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"သင့်မျက်နှာကို အပြည့်အဝ မြင်ရရန်လိုအပ်သည်"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"သင့်မျက်နှာကို အပြည့်အဝ မြင်ရရန်လိုအပ်သည်"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"သင့်မျက်နှာနမူနာ ပြုလုပ်၍မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"အရောင်ရင့်သောမျက်မှန် တွေ့သည်။ သင့်မျက်နှာကို အပြည့်အဝ မြင်ရရန်လိုအပ်သည်။"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"မျက်နှာဖုံး တွေ့သည်။ သင့်မျက်နှာကို အပြည့်အဝ မြင်ရရန်လိုအပ်သည်။"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"မျက်နှာကို အတည်ပြု၍ မရပါ။ ဟာ့ဒ်ဝဲ မရနိုင်ပါ။"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 2fe725a00791..ed7c1e3986f3 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Opplåsing med fingeravtrykk"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Kan ikke bruke fingeravtrykkssensoren"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Gå til en reparasjonsleverandør."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Kunne ikke ta opp nøyaktige ansiktsdata Prøv på nytt"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Kan ikke lage ansiktsmodell. Prøv på nytt."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"For lyst. Prøv svakere belysning."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"For mørkt. Prøv sterkere belysning."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Flytt telefonen lengre unna"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Flytt telefonen nærmere."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Flytt telefonen høyere."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Flytt telefonen lavere."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Flytt telefonen til venstre."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Flytt telefonen til høyre."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Prøv sterkere belysning"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Flytt telefonen lengre unna"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Flytt telefonen nærmere"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Flytt telefonen høyere"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Flytt telefonen lavere"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Flytt telefonen til venstre"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Flytt telefonen til høyre"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Se mer direkte på enheten din."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Hold ansiktet ditt rett foran telefonen."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Kan ikke se ansiktet ditt. Hold telefonen i øyehøyde."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"For mye bevegelse. Hold telefonen stødig."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Registrer ansiktet ditt på nytt."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Kan ikke gjenkjenne ansiktet lenger. Prøv på nytt."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"For likt – endre posituren din."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Vri hodet ditt litt mindre."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Vri hodet litt mindre."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Vri hodet ditt litt mindre."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Ansiktet gjenkjennes ikke. Prøv på nytt."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Endre hodeposisjonen litt"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Se mer direkte på telefonen"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Se mer direkte på telefonen"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Se mer direkte på telefonen"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Fjern alt som skjuler ansiktet ditt."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Rengjør den øverste delen av skjermen, inkludert den svarte linjen"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Ansiktet må være helt synlig"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Ansiktet må være helt synlig"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Kan ikke lage ansiktsmodell. Prøv på nytt."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Mørke briller er registrert. Ansiktet må være helt synlig."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ansiktsdekke er registrert. Ansiktet må være helt synlig."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Kan ikke bekrefte ansikt. Utilgjengelig maskinvare."</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index cc4d6a169f2d..d94b0e8b31ce 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"फिंगरप्रिन्ट अनलक"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"फिंगरप्रिन्ट सेन्सर प्रयोग गर्न मिल्दैन"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"फिंगरप्रिन्ट सेन्सर मर्मत गर्ने सेवा प्रदायक कम्पनीमा सम्पर्क गर्नुहोस्।"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"अनुहारको सटीक डेटा खिच्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"तपाईंको फेस मोडेल सिर्जना गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"ज्यादै चम्किलो। अझ मधुरो प्रकाश प्रयोग गरी हेर्नु…"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"ज्यादै अँध्यारो छ। अझ बढी प्रकाशमा गई हेर्नुहोस्"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"फोन अझै पर सार्नुहोस्।"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"फोन अझै नजिक सार्नुहोस्।"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"फोन अझ माथि उठाउनुहोस्।"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"फोन अझै तल सार्नुहोस्।"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"फोन बायाँतिर सार्नुहोस्।"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"फोन दायाँतिर सार्नुहोस्।"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"अझ उज्यालो ठाउँमा गएर फोटो खिची हेर्नुहोस्"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"फोन अझै पर सार्नुहोस्"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"फोन अझै नजिक सार्नुहोस्"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"फोन अझ माथि उठाउनुहोस्"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"फोन अझै तल सार्नुहोस्"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"फोन आफ्नो बायाँतिर सार्नुहोस्"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"फोन आफ्नो दायाँतिर सार्नुहोस्"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"कृपया अझ सीधा गरी आफ्नो स्क्रिनमा हेर्नुहोस्।"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"आफ्नो अनुहार फोनको सीधा अगाडि पार्नुहोस्।"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"तपाईंको अनुहार देखिएन। तपाईंको फोन आफ्नो आँखाअघि राखी समात्नुहोस्।"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"अत्यधिक हल्लियो। फोन स्थिर राख्नुहोस्।"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"कृपया आफ्नो अनुहार पुनः दर्ता गर्नुहोस्।"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"अब उप्रान्त अनुहार पहिचान गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"अनुहार उस्तै भयो, कृपया आफ्नो पोज बदल्नुहोस्।"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"आफ्नो टाउको अलि थोरै घुमाउनुहोस्।"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"आफ्नो टाउको केही कम झुकाउनुहोस्।"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"आफ्नो टाउको अलि थोरै घुमाउनुहोस्।"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"अनुहार पहिचान गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"आफ्नो टाउको थोरै यताउता सार्नुहोस्"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"आफ्नो फोनमा अझ सीधा हेर्नुहोस्"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"आफ्नो फोनमा अझ सीधा हेर्नुहोस्"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"आफ्नो फोनमा अझ सीधा हेर्नुहोस्"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"तपाईंको अनुहार लुकाउने सबै कुरा हटाउनुहोस्।"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"कालो रङको पट्टीलगायत आफ्नो स्क्रिनको माथिल्लो भाग सफा गर्नुहोस्"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"तपाईंको अनुहार पूरै देखिनु पर्छ"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"तपाईंको अनुहार पूरै देखिनु पर्छ"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"तपाईंको फेस मोडेल सिर्जना गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"कालो चस्मा लगाइएको पाइयो। तपाईंको अनुहार पूरै देखिनु पर्छ।"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"अनुहार छोपिएको पाइयो। तपाईंको अनुहार पूरै देखिनु पर्छ।"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"अनुहार पुष्टि गर्न सकिएन। हार्डवेयर उपलब्ध छैन।"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 6082855417a1..8ebf2db6bd4e 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Ontgrendelen met vingerafdruk"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Kan vingerafdruksensor niet gebruiken"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Ga naar een reparateur."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Geen accurate gegevens. Probeer het nog eens."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Kan gezichtsmodel niet maken. Probeer het opnieuw."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Overbelicht. Probeer een minder felle belichting."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Te donker. Probeer een fellere verlichting."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Beweeg de telefoon verder weg."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Houd de telefoon dichterbij."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Houd de telefoon hoger."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Houd de telefoon lager."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Beweeg je telefoon meer naar links."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Beweeg je telefoon meer naar rechts."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Probeer fellere verlichting"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Houd de telefoon verder weg"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Houd de telefoon dichterbij"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Houd de telefoon hoger"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Houd de telefoon lager"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Beweeg de telefoon naar links"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Beweeg de telefoon naar rechts"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Kijk rechter naar je apparaat."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Houd je gezicht recht voor de telefoon."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Je gezicht is niet te zien. Houd je telefoon op ooghoogte."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Te veel beweging. Houd je telefoon stil."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Registreer je gezicht opnieuw."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Herkent gezicht niet meer. Probeer het nog eens."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Lijkt te veel op elkaar. Verander je pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Draai je hoofd iets minder."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Kantel je hoofd iets minder."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Draai je hoofd iets minder."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Gezicht niet herkend. Probeer het opnieuw."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Verander de positie van je hoofd een beetje"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Kijk goed recht naar je telefoon"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Kijk goed recht naar je telefoon"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Kijk goed recht naar je telefoon"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Zorg dat je gezicht volledig zichtbaar is"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Reinig de bovenkant van je scherm, inclusief de zwarte balk"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Je gezicht moet geheel zichtbaar zijn"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Je gezicht moet geheel zichtbaar zijn"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Kan gezichtsmodel niet maken. Probeer het opnieuw."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Donkere bril waargenomen. Je gezicht moet geheel zichtbaar zijn."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Gezichtsbedekking waargenomen. Je gezicht moet geheel zichtbaar zijn."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Kan gezicht niet verifiëren. Hardware niet beschikbaar."</string> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 20eb100d5aa9..6f74ea67127e 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ୍"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"ଟିପଚିହ୍ନ ସେନ୍ସରକୁ ବ୍ୟବହାର କରାଯାଇପାରିବ ନାହିଁ"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ଏକ ମରାମତି କେନ୍ଦ୍ରକୁ ଭିଜିଟ୍ କରନ୍ତୁ।"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"ମୁହଁର ଡାଟା କ୍ୟାପଚର୍ ହେଲାନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"ଫେସର ମଡେଲ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କର।"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"ଅତ୍ୟଧିକ ଉଜ୍ଵଳ। କମ୍ ଉଜ୍ବଳକରଣରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"ଅତ୍ୟଧିକ ଅନ୍ଧକାର। ଉଜ୍ବଳ ଲାଇଟ୍ ବ୍ୟବହାର କରନ୍ତୁ।"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ଫୋନ୍କୁ ଟିକେ ଦୂରକୁ ନିଅନ୍ତୁ।"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ଫୋନକୁ ପାଖକୁ ଆଣନ୍ତୁ।"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ଫୋନକୁ ଉପରକୁ ମୁଭ କରନ୍ତୁ।"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ଫୋନ୍କୁ ତଳକୁ ମୁଭ କରନ୍ତୁ।"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ବାମ ପଟକୁ ଫୋନ୍ ଘୁଞ୍ଚାନ୍ତୁ।"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ଡାହାଣ ପଟକୁ ଫୋନ୍ ଘୁଞ୍ଚାନ୍ତୁ।"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"ଉଜ୍ଜ୍ୱଳ ଲାଇଟ ବ୍ୟବହାର କରି ଦେଖନ୍ତୁ"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ଫୋନକୁ ଟିକେ ଦୂରକୁ ନିଅନ୍ତୁ"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ଫୋନକୁ ପାଖକୁ ଆଣନ୍ତୁ"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ଫୋନକୁ ଉପରକୁ ମୁଭ କରନ୍ତୁ"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ଫୋନ୍କୁ ତଳକୁ ମୁଭ କରନ୍ତୁ"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ଫୋନକୁ ଆପଣଙ୍କ ବାମ ପଟକୁ ମୁଭ କରନ୍ତୁ"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ଫୋନକୁ ଆପଣଙ୍କ ଡାହାଣ ପଟକୁ ମୁଭ କରନ୍ତୁ"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"ଦୟାକରି ଆପଣଙ୍କ ଡିଭାଇସ୍କୁ ସିଧାସଳଖ ଦେଖନ୍ତୁ।"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"ଆପଣଙ୍କ ମୁହଁକୁ ଫୋନ୍ ସାମ୍ନାରେ ସିଧାସଳଖ ରଖନ୍ତୁ।"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"ଆପଣଙ୍କ ଫେସ ଦେଖାଯାଉନାହିଁ। ଆପଣଙ୍କ ଫୋନକୁ ଆଖି ସିଧାରେ ଧରି ରଖନ୍ତୁ।"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"ଅତ୍ୟଧିକ ଅସ୍ଥିର। ଫୋନ୍କୁ ସ୍ଥିର ଭାବେ ଧରନ୍ତୁ।"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"ଦୟାକରି ଆପଣଙ୍କର ମୁହଁ ପୁଣି-ଏନ୍ରୋଲ୍ କରନ୍ତୁ।"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"ଆଉ ମୁହଁ ଚିହ୍ନଟ କରିହେଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"ଅତ୍ୟନ୍ତ ସମପରି, ଦୟାକରି ଆପଣଙ୍କର ପୋଜ୍ ବଦଳାନ୍ତୁ।"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"ଆପଣଙ୍କର ମୁଣ୍ଡକୁ ଟିକିଏ ବୁଲାନ୍ତୁ।"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"ଆପଣଙ୍କ ମୁଣ୍ଡକୁ ଟିକିଏ କମ୍ ଟିଲ୍ଟ କରନ୍ତୁ।"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"ଆପଣଙ୍କର ମୁଣ୍ଡକୁ ଟିକିଏ ବୁଲାନ୍ତୁ।"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"ଫେସ ଚିହ୍ନଟ କରାଯାଇପାରିବ ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କର।"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"ଆପଣଙ୍କ ମୁଣ୍ଡର ସ୍ଥିତି ସାମାନ୍ୟ ବଦଳାନ୍ତୁ"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"ଆପଣଙ୍କ ଫୋନକୁ ସମ୍ପୂର୍ଣ୍ଣ ସିଧା ଦେଖନ୍ତୁ"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"ଆପଣଙ୍କ ଫୋନକୁ ସମ୍ପୂର୍ଣ୍ଣ ସିଧା ଦେଖନ୍ତୁ"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ଆପଣଙ୍କ ଫୋନକୁ ସମ୍ପୂର୍ଣ୍ଣ ସିଧା ଦେଖନ୍ତୁ"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"ଆପଣଙ୍କ ମୁହଁକୁ ଲୁଚାଉଥିବା ଯେ କୌଣସି ଜିନିଷକୁ କାଢ଼ି ଦିଅନ୍ତୁ।"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"କଳା ବାର୍ ସମେତ ଆପଣଙ୍କ ସ୍କ୍ରିନ୍ର ଶୀର୍ଷକୁ ସଫା କରନ୍ତୁ"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ଆପଣଙ୍କ ଫେସ ସମ୍ପୂର୍ଣ୍ଣ ଭାବରେ ଦେଖାଯିବା ଆବଶ୍ଯକ"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ଆପଣଙ୍କ ଫେସ ସମ୍ପୂର୍ଣ୍ଣ ଭାବରେ ଦେଖାଯିବା ଆବଶ୍ଯକ"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ଫେସର ମଡେଲ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କର।"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"କଳା ଚଷମା ଚିହ୍ନଟ କରାଯାଇଛି। ଆପଣଙ୍କ ଫେସ ସମ୍ପୂର୍ଣ୍ଣ ଭାବରେ ଦେଖାଯିବା ଆବଶ୍ଯକ।"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ଫେସରେ କଭରିଂ ଚିହ୍ନଟ କରାଯାଇଛି। ଆପଣଙ୍କ ଫେସ ସମ୍ପୂର୍ଣ୍ଣ ଭାବରେ ଦେଖାଯିବା ଆବଶ୍ଯକ।"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"ମୁହଁ ଚିହ୍ନଟ କରିପାରିଲା ନାହିଁ। ହାର୍ଡୱେୟାର୍ ଉପଲବ୍ଧ ନାହିଁ।"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index f595dba67643..3635e69c2cac 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ਮੁਰੰਮਤ ਪ੍ਰਦਾਨਕ \'ਤੇ ਜਾਓ।"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"ਸਟੀਕ ਚਿਹਰਾ ਡਾਟਾ ਕੈਪਚਰ ਨਹੀਂ ਹੋਇਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"ਤੁਹਾਡੇ ਚਿਹਰੇ ਦਾ ਮਾਡਲ ਨਹੀਂ ਬਣਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"ਬਹੁਤ ਜ਼ਿਆਦਾ ਚਮਕ। ਹਲਕੀ ਚਮਕ ਵਰਤ ਕੇ ਦੇਖੋ।"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"ਬਹੁਤ ਗੂੜ੍ਹਾ। ਤੇਜ਼ ਰੋਸ਼ਨੀ ਕਰਕੇ ਦੇਖੋ।"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ਫ਼ੋਨ ਨੂੰ ਦੂਰ ਲਿਜਾਓ।"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ਫ਼ੋਨ ਨੇੜੇ ਲਿਜਾਓ।"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ਫ਼ੋਨ ਨੂੰ ਥੋੜ੍ਹਾ ਉੱਤੇ ਕਰੋ।"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ਫ਼ੋਨ ਨੂੰ ਥੋੜ੍ਹਾ ਹੇਠਾਂ ਵੱਲ ਕਰੋ।"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ਫ਼ੋਨ ਨੂੰ ਖੱਬੇ ਪਾਸੇ ਲਿਜਾਓ।"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ਫ਼ੋਨ ਨੂੰ ਸੱਜੇ ਪਾਸੇ ਲਿਜਾਓ।"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"ਤੇਜ਼ ਰੋਸ਼ਨੀ ਕਰ ਕੇ ਦੇਖੋ"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ਫ਼ੋਨ ਨੂੰ ਦੂਰ ਲਿਜਾਓ"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ਫ਼ੋਨ ਨੇੜੇ ਲਿਜਾਓ"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ਫ਼ੋਨ ਨੂੰ ਥੋੜ੍ਹਾ ਉੱਤੇ ਲਿਜਾਓ"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ਫ਼ੋਨ ਨੂੰ ਥੋੜ੍ਹਾ ਹੇਠਾਂ ਲਿਜਾਓ"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ਫ਼ੋਨ ਨੂੰ ਆਪਣੇ ਖੱਬੇ ਪਾਸੇ ਲਿਜਾਓ"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ਫ਼ੋਨ ਨੂੰ ਆਪਣੇ ਸੱਜੇ ਪਾਸੇ ਲਿਜਾਓ"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"ਕਿਰਪਾ ਕਰਕੇ ਸਿੱਧਾ ਆਪਣੇ ਡੀਵਾਈਸ ਵੱਲ ਦੇਖੋ।"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"ਆਪਣਾ ਚਿਹਰਾ ਫ਼ੋਨ ਦੇ ਬਿਲਕੁਲ ਸਾਹਮਣੇ ਰੱਖੋ।"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"ਤੁਹਾਡਾ ਚਿਹਰਾ ਨਹੀਂ ਦਿਸ ਰਿਹਾ। ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਅੱਖਾਂ ਦੀ ਸੀਧ ਵਿੱਚ ਰੱਖੋ।"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"ਬਹੁਤ ਜ਼ਿਆਦਾ ਹਿਲਜੁਲ। ਫ਼ੋਨ ਨੂੰ ਸਥਿਰ ਰੱਖੋ।"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"ਕਿਰਪਾ ਕਰਕੇ ਆਪਣਾ ਚਿਹਰਾ ਦੁਬਾਰਾ ਦਰਜ ਕਰੋ।"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"ਹੁਣ ਚਿਹਰਾ ਪਛਾਣਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"ਬਹੁਤ ਮਿਲਦਾ-ਜੁਲਦਾ ਹੈ, ਕਿਰਪਾ ਕਰਕੇ ਆਪਣਾ ਅੰਦਾਜ਼ ਬਦਲੋ।"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"ਆਪਣਾ ਸਿਰ ਥੋੜਾ ਜਿਹਾ ਝੁਕਾਓ।"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"ਆਪਣੇ ਸਿਰ ਨੂੰ ਥੋੜ੍ਹਾ ਜਿਹਾ ਝੁਕਾਓ।"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"ਆਪਣਾ ਸਿਰ ਥੋੜਾ ਜਿਹਾ ਝੁਕਾਓ।"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਨਹੀਂ ਹੋਈ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"ਆਪਣੇ ਸਿਰ ਨੂੰ ਥੋੜ੍ਹਾ ਹਿਲਾਓ"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"ਸਿੱਧਾ ਆਪਣੇ ਫ਼ੋਨ ਵੱਲ ਦੇਖੋ"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"ਸਿੱਧਾ ਆਪਣੇ ਫ਼ੋਨ ਵੱਲ ਦੇਖੋ"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ਸਿੱਧਾ ਆਪਣੇ ਫ਼ੋਨ ਵੱਲ ਦੇਖੋ"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"ਤੁਹਾਡਾ ਚਿਹਰਾ ਲੁਕਾਉਣ ਵਾਲੀ ਕੋਈ ਵੀ ਚੀਜ਼ ਹਟਾਓ।"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ਕਾਲੀ ਪੱਟੀ ਸਮੇਤ, ਆਪਣੀ ਸਕ੍ਰੀਨ ਦੇ ਸਿਖਰ ਨੂੰ ਸਾਫ਼ ਕਰੋ"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ਤੁਹਾਡਾ ਪੂਰਾ ਚਿਹਰਾ ਦਿਸਣਾ ਲਾਜ਼ਮੀ ਹੈ"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ਤੁਹਾਡਾ ਪੂਰਾ ਚਿਹਰਾ ਦਿਸਣਾ ਲਾਜ਼ਮੀ ਹੈ"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ਤੁਹਾਡੇ ਚਿਹਰੇ ਦਾ ਮਾਡਲ ਨਹੀਂ ਬਣਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ਧੁੱਪ ਦੀਆਂ ਐਨਕਾਂ ਦਾ ਪਤਾ ਲੱਗਾ। ਤੁਹਾਡਾ ਪੂਰਾ ਚਿਹਰਾ ਦਿਸਣਾ ਲਾਜ਼ਮੀ ਹੈ।"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ਚਿਹਰਾ ਢੱਕਿਆ ਹੋਣ ਦਾ ਪਤਾ ਲੱਗਾ। ਤੁਹਾਡਾ ਪੂਰਾ ਚਿਹਰਾ ਦਿਸਣਾ ਲਾਜ਼ਮੀ ਹੈ।"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"ਚਿਹਰੇ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਹੋ ਸਕੀ। ਹਾਰਡਵੇਅਰ ਉਪਲਬਧ ਨਹੀਂ।"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 9d08c66331ce..2e491b385910 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -636,26 +636,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Odblokowywanie odciskiem palca"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Nie można użyć czytnika linii papilarnych"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Odwiedź serwis."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Nie udało się zarejestrować danych twarzy. Spróbuj ponownie."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Nie można utworzyć modelu twarzy. Spróbuj ponownie."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Zbyt jasno. Spróbuj przy słabszym świetle."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Zbyt ciemno. Spróbuj w jaśniejszym świetle."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Odsuń telefon."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Przybliż telefon."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Przesuń telefon wyżej."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Przesuń telefon niżej."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Przesuń telefon w lewo."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Przesuń telefon w prawo."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Spróbuj w jaśniejszym świetle"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Odsuń telefon"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Przybliż telefon"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Przesuń telefon wyżej"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Przesuń telefon niżej"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Przesuń telefon w lewo"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Przesuń telefon w prawo"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Patrz prosto na urządzenie."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Ustaw twarz dokładnie na wprost telefonu."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Nie widzę twarzy. Trzymaj telefon na wysokości oczu."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Telefon się porusza. Trzymaj go nieruchomo."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Zarejestruj swoją twarz ponownie."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Nie można już rozpoznać twarzy. Spróbuj ponownie."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Za mała różnica. Zmień pozycję."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Trochę mniej obróć głowę."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Trochę mniej pochyl głowę."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Trochę mniej obróć głowę."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Nie rozpoznaję twarzy. Spróbuj ponownie."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Lekko zmień położenie głowy"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Patrz prosto na telefon"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Patrz prosto na telefon"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Patrz prosto na telefon"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Usuń wszystko, co zasłania Ci twarz."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Wyczyść górną krawędź ekranu, w tym czarny pasek"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Twarz musi być widoczna w całości"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Twarz musi być widoczna w całości"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nie można utworzyć modelu twarzy. Spróbuj ponownie."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Wykryto ciemne okulary. Twarz musi być widoczna w całości."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Wykryto zasłonę twarzy. Twarz musi być widoczna w całości."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Nie można zweryfikować twarzy. Sprzęt niedostępny."</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index e66e32bdd1fd..33002120583b 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Desbloqueio por impressão digital"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Não foi possível usar o sensor de impressão digital"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Entre em contato com uma assistência técnica."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Dados precisos não capturados. Tente novamente."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Falha ao criar o modelo de rosto. Tente de novo."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Muito iluminado. Diminua a iluminação."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Muito escuro. Use uma iluminação mais clara."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Afaste o smartphone."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Aproxime o smartphone."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Mova o smartphone para cima."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Mova o smartphone para baixo."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Mova o smartphone para a esquerda."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Mova o smartphone para a direita."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Use uma iluminação mais intensa"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Afaste o smartphone"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Aproxime o smartphone do seu rosto"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Mova o smartphone para cima"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Mova o smartphone para baixo"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Mova o smartphone para a esquerda"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Mova o smartphone para a direita"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Olhe mais diretamente para o dispositivo."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Deixe o rosto diretamente na frente do smartphone."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Rosto não detectado. Segure o smartphone na altura dos olhos."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Muito movimento. Não mova o smartphone."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Registre seu rosto novamente."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"O rosto não é mais reconhecido. Tente novamente."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Muito parecido, mude de posição."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Incline a cabeça um pouco menos."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Incline a cabeça um pouco menos."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Incline a cabeça um pouco menos."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Não foi possível reconhecer o rosto. Tente de novo."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Mude a posição da cabeça ligeiramente"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Olhe diretamente para o smartphone"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Olhe diretamente para o smartphone"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Olhe diretamente para o smartphone"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Remova tudo que esteja ocultando seu rosto."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpe a parte superior da tela, inclusive a barra preta"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Seu rosto precisa estar completamente visível"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Seu rosto precisa estar completamente visível"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Falha ao criar o modelo de rosto. Tente de novo."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Óculos escuros detectados. Seu rosto precisa estar completamente visível."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detectada. Seu rosto precisa estar completamente visível."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Impossível verificar rosto. Hardware indisponível."</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 93516bd2024c..28412db5586c 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Desbloqueio por impressão digital"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Não é possível utilizar o sensor de impressões digitais"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visite um fornecedor de serviços de reparação."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Imp. capt. dados rosto precisos. Tente novamente."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Impossível criar modelo de rosto. Tente novamente."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Demasiado clara. Experimente uma luz mais suave."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Demasiado escura. Experimente local com mais luz."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Afaste ainda mais o telemóvel."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Aproxime o telemóvel."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Mova o telemóvel mais para cima."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Mova o telemóvel mais para baixo."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Mova o telemóvel para a esquerda."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Mova o telemóvel para a direita."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Experimente um local com mais luz"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Afaste ainda mais o telemóvel"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Aproxime o telemóvel do rosto"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Mova o telemóvel mais para cima"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Mova o telemóvel mais para baixo"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Mova o telemóvel para a sua esquerda"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Mova o telemóvel para a sua direita"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Olhe mais diretamente para o dispositivo."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Posicione o rosto em frente ao telemóvel."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Não é possível ver o seu rosto. Mantenha o telemóvel ao nível dos olhos."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Demasiado movimento. Mantenha o telemóvel firme."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Volte a inscrever o rosto."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Impossível reconhecer o rosto. Tente novamente."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Muito parecida, mude de pose."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Rode a cabeça um pouco menos."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Incline a cabeça um pouco menos."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Rode a cabeça um pouco menos."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Impossível reconhecer o rosto. Tente novamente."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Altere ligeiramente a posição da sua cabeça"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Olhe mais diretamente para o telemóvel"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Olhe mais diretamente para o telemóvel"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Olhe mais diretamente para o telemóvel"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Remova tudo o que esteja a ocultar o seu rosto."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpe a parte superior do ecrã, incluindo a barra preta."</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"O seu rosto tem de estar completamente visível"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"O seu rosto tem de estar completamente visível"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Não é possível criar o seu modelo de rosto. Tente novamente."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Óculos escuros detetados. O seu rosto tem de estar completamente visível."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Cobertura facial detetada. O seu rosto tem de estar completamente visível."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Não pode validar o rosto. Hardware não disponível."</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index e66e32bdd1fd..33002120583b 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Desbloqueio por impressão digital"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Não foi possível usar o sensor de impressão digital"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Entre em contato com uma assistência técnica."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Dados precisos não capturados. Tente novamente."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Falha ao criar o modelo de rosto. Tente de novo."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Muito iluminado. Diminua a iluminação."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Muito escuro. Use uma iluminação mais clara."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Afaste o smartphone."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Aproxime o smartphone."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Mova o smartphone para cima."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Mova o smartphone para baixo."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Mova o smartphone para a esquerda."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Mova o smartphone para a direita."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Use uma iluminação mais intensa"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Afaste o smartphone"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Aproxime o smartphone do seu rosto"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Mova o smartphone para cima"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Mova o smartphone para baixo"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Mova o smartphone para a esquerda"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Mova o smartphone para a direita"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Olhe mais diretamente para o dispositivo."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Deixe o rosto diretamente na frente do smartphone."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Rosto não detectado. Segure o smartphone na altura dos olhos."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Muito movimento. Não mova o smartphone."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Registre seu rosto novamente."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"O rosto não é mais reconhecido. Tente novamente."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Muito parecido, mude de posição."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Incline a cabeça um pouco menos."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Incline a cabeça um pouco menos."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Incline a cabeça um pouco menos."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Não foi possível reconhecer o rosto. Tente de novo."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Mude a posição da cabeça ligeiramente"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Olhe diretamente para o smartphone"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Olhe diretamente para o smartphone"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Olhe diretamente para o smartphone"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Remova tudo que esteja ocultando seu rosto."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpe a parte superior da tela, inclusive a barra preta"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Seu rosto precisa estar completamente visível"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Seu rosto precisa estar completamente visível"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Falha ao criar o modelo de rosto. Tente de novo."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Óculos escuros detectados. Seu rosto precisa estar completamente visível."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detectada. Seu rosto precisa estar completamente visível."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Impossível verificar rosto. Hardware indisponível."</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 150c0dc04c30..67b3fe673d3c 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -635,26 +635,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Deblocare cu amprenta"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Nu se poate folosi senzorul de amprentă"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Vizitați un furnizor de servicii de reparații."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Nu s-a putut fotografia fața cu precizie. Încercați din nou."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Nu se poate crea modelul facial. Reîncercați."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Prea luminos. Încercați o lumină mai slabă."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Prea întunecat. Încercați o lumină mai puternică."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Mutați telefonul mai departe."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Mutați telefonul mai aproape."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Mutați telefonul mai sus."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Mutați telefonul mai jos."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Mutați telefonul spre stânga."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Mutați telefonul spre dreapta."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Încercați o lumină mai puternică"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Mutați telefonul mai departe"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Mutați telefonul mai aproape"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Mutați telefonul mai sus"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Mutați telefonul mai jos"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Mutați telefonul spre stânga"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Mutați telefonul spre dreapta"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Priviți mai direct spre dispozitiv."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Stați cu capul direct în fața telefonului."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Nu vi se vede fața. Țineți telefonul la nivelul ochilor."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Prea multă mișcare. Țineți telefonul nemișcat."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Reînregistrați-vă chipul."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Nu se mai poate recunoaște fața. Încercați din nou."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Prea asemănător, schimbați poziția."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Întoarceți capul mai puțin."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Înclinați capul mai puțin."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Întoarceți capul mai puțin."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Chipul nu a fost recunoscut. Reîncercați."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Schimbați ușor poziția capului"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Priviți direct spre telefon"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Priviți direct spre telefon"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Priviți direct spre telefon"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Eliminați orice vă ascunde chipul."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Curățați partea de sus a ecranului, inclusiv bara neagră"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Chipul trebuie să fie vizibil în totalitate"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Chipul trebuie să fie vizibil în totalitate"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nu se poate crea modelul facial. Reîncercați."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"S-au detectat ochelari de culoare închisă. Chipul trebuie să fie vizibil în totalitate."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"S-a detectat un articol care acoperă chipul. Chipul trebuie să fie vizibil în totalitate."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Nu se poate confirma fața. Hardware-ul nu este disponibil."</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index ab1b5915cad6..e43aae9c2998 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -636,26 +636,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Разблокировка по отпечатку пальца"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Невозможно использовать сканер отпечатков пальцев"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Обратитесь в сервисный центр."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Не удалось собрать данные. Повторите попытку."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Невозможно создать модель лица. Повторите попытку."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Слишком светло. Сделайте освещение менее ярким."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Слишком темно. Сделайте освещение ярче"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Переместите телефон дальше."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Переместите телефон ближе."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Переместите телефон выше."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Переместите телефон ниже."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Переместите телефон влево."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Переместите телефон вправо."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Сделайте освещение ярче"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Переместите телефон дальше от лица"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Переместите телефон ближе к лицу"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Переместите телефон выше"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Переместите телефон ниже"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Переместите телефон левее"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Переместите телефон правее"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Смотрите прямо на устройство."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Держите телефон прямо перед лицом."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Вашего лица не видно. Держите телефон на уровне глаз"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Не перемещайте устройство. Держите его неподвижно."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Повторите попытку."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Не удалось распознать лицо. Повторите попытку."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Слишком похожее выражение лица. Измените позу."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Держите голову ровнее."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Не наклоняйте голову слишком сильно."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Держите голову ровнее."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Не удалось распознать лицо. Повторите попытку."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Немного измените положение головы"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Смотрите прямо на телефон"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Смотрите прямо на телефон"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Смотрите прямо на телефон"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Ваше лицо плохо видно"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Протрите верхнюю часть экрана (в том числе черную панель)."</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Лицо должно быть полностью видно"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Лицо должно быть полностью видно"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Невозможно создать модель лица. Повторите попытку."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Обнаружены темные очки. Лицо должно быть полностью видно"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Часть лица закрыта. Оно должно быть полностью видно."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Не удалось распознать лицо. Сканер недоступен."</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index f0cde1dad419..e8d2be9a87cf 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ඇඟිලි සලකුණු අගුළු හැරීම"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"ඇඟිලි සලකුණු සංවේදකය භාවිත කළ නොහැකිය"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"අළුත්වැඩියා සැපයුම්කරුවෙකු බලන්න."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"නිරවද්ය මුහුණු දත්ත ගත නොහැකි විය. නැවත උත්සාහ කරන්න."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"ඔබගේ මුහුණු ආකෘතිය තැනිය නොහැකිය. නැවත උත්සාහ කරන්න."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"දීප්තිය වැඩියි. තවත් මඳ ආලෝකය උත්සාහ කරන්න."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"ඉතා අඳුරුයි. තවත් දීප්තිමත් ආලෝකය උත්සාහ කරන්න."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"දුරකථනය තවත් දුරට ගෙන යන්න."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"දුරකථනය තවත් සමීපව ගෙන යන්න."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"දුරකථනය ඉහළට ගෙන යන්න."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"දුරකථනය පහළට ගෙන යන්න."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"දුරකථනය වමට ගෙන යන්න."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"දුරකථනය දකුණට ගෙන යන්න."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"තවත් දීප්තිමත් ආලෝකය උත්සාහ කරන්න"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"දුරකථනය තවත් ඈතට ගෙන යන්න"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"දුරකථනය තවත් සමීපයට ගෙන එන්න"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"දුරකථනය තවත් ඉහළට ගෙන යන්න"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"දුරකථනය තවත් පහළට ගෙන යන්න"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"දුරකථනය ඔබගේ වම් පසට ගෙන යන්න"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"දුරකථනය ඔබගේ දකුණු පසට ගෙන යන්න"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"ඔබේ උපාංගය වෙත තවත් ඍජුව බලන්න."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"ඔබේ මුහුණ දුරකථනයට සෘජුවම ඉදිරියෙන් ස්ථානගත කරන්න."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"ඔබගේ මුහුණ දැකිය නොහැකිය. ඔබගේ දුරකථනය ඇස් මට්ටමින් අල්ලා ගන්න."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"චලනය ඉතා වැඩියි. දුරකථනය ස්ථිරව අල්ලා සිටින්න."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"ඔබේ මුහුණ යළි ලියාපදිංචි කරන්න."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"තවදුරටත් මුහුණ හඳුනාගත නොහැක. නැවත උත්සාහ කරන්න."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"ඉතා සමානයි, ඔබේ හැඩ ගැසීම වෙනස් කරන්න."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"ඔබේ හිස ටිකක් අඩුවෙන් කරකවන්න."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"ඔබගේ හිස ටිකක් අඩුවෙන් ඇල කරන්න."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"ඔබේ හිස ටිකක් අඩුවෙන් කරකවන්න."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"මුහුණ හඳුනා ගත නොහැකිය. නැවත උත්සාහ කරන්න."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"ඔබගේ හිසෙහි පිහිටීම මදක් වෙනස් කරන්න"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"ඔබගේ දුරකථනය දෙස වඩාත් ඍජුව බලන්න"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"ඔබගේ දුරකථනය දෙස වඩාත් ඍජුව බලන්න"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ඔබගේ දුරකථනය දෙස වඩාත් ඍජුව බලන්න"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"ඔබේ මුහුණ සඟවන කිසිවක් ඉවත් කරන්න."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"කලු තීරුව ඇතුළුව, ඔබේ තිරයෙහි මුදුන පිරිසිදු කරන්න"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ඔබගේ මුහුණ සම්පූර්ණයෙන් දෘශ්යමාන විය යුතුය"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ඔබගේ මුහුණ සම්පූර්ණයෙන් දෘශ්යමාන විය යුතුය"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ඔබගේ මුහුණු ආකෘතිය තැනිය නොහැකිය. නැවත උත්සාහ කරන්න."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"අඳුරු කණ්ණාඩි අනාවරණය කර ගන්නා ලදි. ඔබගේ මුහුණ සම්පූර්ණයෙන් දෘශ්යමාන විය යුතුය."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"මුහුණු ආවරණය අනාවරණය කර ගන්නා ලදි. ඔබගේ මුහුණ සම්පූර්ණයෙන් දෘශ්යමාන විය යුතුය."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"මුහුණ සත්යාපනය කළ නොහැක. දෘඩාංගය නොමැත."</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 8b3768c3642d..99d9adf75e4d 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -636,26 +636,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Odomknutie odtlačkom prsta"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Senzor odtlačkov prstov nie je možné používať"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Navštívte poskytovateľa opráv."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Nepodarilo sa nasnímať presné údaje o tvári. Skúste to znova."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Model tváre sa nedá vytvoriť. Skúste to znova."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Príliš veľa svetla. Skúste jemnejšie osvetlenie."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Príliš veľká tma. Skúste lepšie osvetlenie."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Oddiaľte telefón."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Priblížte telefón."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Posuňte telefón vyššie."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Posuňte telefón nižšie."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Posuňte telefón doľava."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Posuňte telefón doprava."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Skúste lepšie osvetlenie"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Oddiaľte telefón"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Priblížte telefón"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Posuňte telefón vyššie"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Posuňte telefón nižšie"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Posuňte telefón doľava"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Posuňte telefón doprava"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Pozrite sa priamejšie na zariadenie."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Umiestnite svoju tvár priamo pred telefón."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Nie je vidieť vašu tvár. Držte telefón na úrovni očí."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Priveľa pohybu. Nehýbte telefónom."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Znova zaregistrujte svoju tvár."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Tvár už nie je možné rozpoznať. Skúste to znova."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Príliš rovnaké, zmeňte postoj."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Otočte hlavu o niečo menej."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Nakloňte hlavu trocha menej."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Otočte hlavu o niečo menej."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Tvár sa nedá rozpoznať. Skúste to znova."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Trocha zmeňte pozíciu hlavy"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Pozrite sa na telefón priamejšie"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Pozrite sa na telefón priamejšie"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Pozrite sa na telefón priamejšie"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Odstráňte všetko, čo vám zakrýva tvár."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Vyčistite hornú časť obrazovky vrátane čierneho panela"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Musí vám byť vidieť celú tvár"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Musí vám byť vidieť celú tvár"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Model tváre sa nedá vytvoriť. Skúste to znova."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Boli rozpoznané tmavé okuliare. Musí vám byť vidieť celú tvár."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Bolo rozpoznané rúško. Musí vám byť vidieť celú tvár."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Tvár sa nedá overiť. Hardvér nie je k dispozícii."</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 9a2941f7ce54..fd1070c59a64 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -636,26 +636,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Odklepanje s prstnim odtisom"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Tipala prstnih odtisov ni mogoče uporabiti"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Obiščite ponudnika popravil."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Točnih podatkov o obrazu ni bilo mogoče zajeti. Poskusite znova."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Modela obraza ni mogoče ustvariti. Poskusite znova."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Presvetlo. Poskusite z blažjo osvetlitvijo."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Pretemno. Poskusite z močnejšo osvetlitvijo."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Telefon nekoliko odmaknite."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Bolj približajte telefon."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Telefon pomaknite višje."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Telefon premaknite nižje."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Telefon premaknite v levo."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Telefon premaknite v desno."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Poskusite z močnejšo osvetlitvijo."</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Telefon nekoliko odmaknite."</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Bolj približajte telefon."</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefon premaknite višje."</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefon premaknite nižje."</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Telefon premaknite v svojo levo."</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Telefon premaknite v svojo desno."</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Glejte bolj naravnost v napravo."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Obraz nastavite naravnost pred telefon."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Obraz ni viden. Držite telefon v višini oči."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Preveč se premikate. Držite telefon pri miru."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Znova registrirajte svoj obraz."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Obraza ni več mogoče prepoznati. Poskusite znova."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Preveč podobno, spremenite položaj."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Glejte malce bolj naravnost."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Obraz nastavite bolj naravnost."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Glejte malce bolj naravnost."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Obraza ni mogoče prepoznati. Poskusite znova."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Nekoliko spremenite položaj glave."</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Glejte bolj naravnost v telefon."</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Glejte bolj naravnost v telefon."</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Glejte bolj naravnost v telefon."</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Umaknite vse, kar vam morda zakriva obraz."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistite vrhnji del zaslona, vključno s črno vrstico"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Videti se mora cel obraz."</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Videti se mora cel obraz."</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Modela obraza ni mogoče ustvariti. Poskusite znova."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Zaznana so temna očala. Videti se mora cel obraz."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Zaznano je, da je obraz prekrit. Videti se mora cel obraz."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Obraza ni mogoče preveriti. Str. opr. ni na voljo."</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index acd4b4415b23..41efa8d79e3c 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Shkyçja me gjurmën e gishtit"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Sensori i gjurmës së gishtit nuk mund të përdoret"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Vizito një ofrues të shërbimit të riparimit."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"S\'mund të regjistroheshin të dhëna të sakta të fytyrës. Provo përsëri."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Modeli i fytyrës nuk krijohet. Provo sërish."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Me shumë ndriçim. Provo një ndriçim më të butë."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Shumë i errët. Provo një ndriçim më të fortë."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Lëvize telefonin më larg."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Afroje telefonin."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Ngrije telefonin më lart."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Ule telefonin më poshtë."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Lëvize telefonin majtas."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Lëvize telefonin djathtas"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Provo një ndriçim më të fortë"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Lëvize telefonin më larg"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Lëvize telefonin më afër"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Lëvize telefonin më lart"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Lëvize telefonin më poshtë"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Lëvize telefonin në të majtën tënde"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Lëvize telefonin në të djathtën tënde"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Shiko më drejt në pajisjen tënde."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Pozicionoje fytyrën tënde direkt përpara telefonit."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Fytyra jote nuk mund të shihet. Mbaje telefonin në nivelin e syve."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Ka shumë lëvizje. Mbaje telefonin të palëvizur."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Regjistroje përsëri fytyrën tënde."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Fytyra nuk mund të njihet më. Provo përsëri."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Tepër e ngjashme, ndrysho pozën"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Ktheje kokën pak më pak."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Anoje kokën më pak."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Ktheje kokën pak më pak."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Fytyra nuk mund të njihet. Provo sërish."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Ndrysho pak pozicionin e kokës"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Shiko më drejtpërdrejt telefonin"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Shiko më drejtpërdrejt telefonin"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Shiko më drejtpërdrejt telefonin"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Hiq gjithçka që fsheh fytyrën tënde."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Pastro kreun e ekranit, duke përfshirë shiritin e zi"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Fytyra jote duhet të jetë plotësisht e dukshme"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Fytyra jote duhet të jetë plotësisht e dukshme"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Modeli i fytyrës nuk krijohet. Provo sërish."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"U zbuluan syze të errëta. Fytyra jote duhet të jetë plotësisht e dukshme."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"U zbulua mbulim i fytyrës. Fytyra jote duhet të jetë plotësisht e dukshme."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Fytyra s\'mund të verifikohet. Hardueri nuk ofrohet."</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 5586cfe4479e..8c6689ac9c7e 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -635,26 +635,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Откључавање отиском прста"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Не можете да користите сензор за отисак прста"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Посетите добављача за поправке."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Снимање лица није успело. Пробајте поново."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Прављење модела лица није успело. Пробајте поново."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Превише је светло. Пробајте са слабијим осветљењем."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Претамно је. Пробајте са јачим осветљењем."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Удаљите телефон."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Приближите телефон."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Померите телефон нагоре."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Померите телефон надоле."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Померите телефон улево."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Померите телефон удесно."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Пробајте са јачим осветљењем"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Удаљите телефон"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Приближите телефон"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Померите телефон нагоре"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Померите телефон надоле"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Померите телефон улево"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Померите телефон удесно"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Гледајте право у уређај."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Поставите лице директно испред телефона"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Не види се лице. Држите телефон у висини очију."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Много се померате. Држите телефон мирно."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Поново региструјте лице."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Више не може да се препозна лице. Пробајте поново."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Превише је слично, промените позу."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Мало мање померите главу."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Мало мање нагните главу."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Мало мање померите главу."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Лице није препознато. Пробајте поново."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Мало померите главу"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Гледајте право у телефон"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Гледајте право у телефон"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Гледајте право у телефон"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Уклоните све што вам заклања лице."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Очистите горњи део екрана, укључујући црну траку"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Лице мора да буде потпуно видљиво"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Лице мора да буде потпуно видљиво"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Прављење модела лица није успело. Пробајте поново."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Откривене су тамне наочари. Лице мора да буде потпуно видљиво."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Откривено је прекривање лица. Лице мора да буде потпуно видљиво."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Провера лица није успела. Хардвер није доступан."</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index b9b4fd4def04..500e56613f1d 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Fingeravtryckslås"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Det går inte att använda fingeravtryckssensorn"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Besök ett reparationsställe."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Det gick inte att fånga ansiktsdata. Försök igen."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Ansiktsmodellen kunde inte skapas. Försök igen."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Det är för ljust. Testa lägre belysning."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Det är för mörkt. Testa med bättre belysning."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Flytta telefonen längre bort."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"För mobilen närmare."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Höj mobilen."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Sänk mobilen."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Flytta mobilen åt vänster."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Flytta mobilen åt höger."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Testa med bättre belysning"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Flytta telefonen längre bort"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"För telefonen närmare"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Höj telefonen"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Sänk telefonen"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Flytta telefonen åt vänster"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Flytta telefonen åt höger"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Titta rakt på enheten."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Ha ansiktet direkt framför telefonen."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Ansiktet syns inte. Håll telefonen i ögonhöjd."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"För mycket rörelse. Håll mobilen stilla."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Registrera ansiktet på nytt."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Ansiktet kan inte längre kännas igen. Försök igen."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"För likt. Ändra ansiktsposition."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Vrid mindre på huvudet."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Vinkla huvudet mindre."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Vrid mindre på huvudet."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Ansiktet kändes inte igen. Försök igen."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Rör lite på huvudet"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Titta rakt på telefonen"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Titta rakt på telefonen"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Titta rakt på telefonen"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Ta bort allt som täcker ansiktet."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Rengör skärmens överkant, inklusive det svarta fältet"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Hela ansiktet måste synas"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Hela ansiktet måste synas"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Ansiktsmodellen kunde inte skapas. Försök igen."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Mörka glasögon identifierades. Hela ansiktet måste synas."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Något som täcker ansiktet identifierades. Hela ansiktet måste synas."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Ansiktsverifiering går ej. Otillgänglig maskinvara."</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index d9684ecc51d7..e23cbd11099f 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Kufungua kwa Alama ya Kidole"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Imeshindwa kutumia kitambua alama ya kidole"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Tembelea mtoa huduma za urekebishaji."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Imeshindwa kunasa data sahihi ya uso. Jaribu tena."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Imeshindwa kuunda muundo wa uso wako. Jaribu tena."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Inang\'aa mno. Jaribu mwangaza hafifu"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Hakuna mwangaza wa kutosha. Jaribu kuongeza mwangaza."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Sogeza simu mbali kiasi."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Sogeza simu karibu."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Sogeza simu juu zaidi."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Sogeza simu chini."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Sogeza simu upande wa kushoto."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Sogeza simu upande wa kulia."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Jaribu kuongeza mwangaza"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Sogeza simu mbali kiasi"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Sogeza simu karibu"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Sogeza simu juu zaidi"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Sogeza simu chini"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Sogeza simu upande wako wa kushoto"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Sogeza simu upande wako wa kulia"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Tafadhali angalia kifaa chako moja kwa moja."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Weka uso wako moja kwa moja mbele ya simu."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Imeshindwa kuona uso wako. Shikilia simu yako ikilingana na macho."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Inatikisika sana. Ishike simu iwe thabiti."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Tafadhali sajili uso wako tena."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Haiwezi tena kutambua uso. Jaribu tena."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Inafanana sana, tafadhali badilisha mkao wako."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Geuza kichwa chako kidogo."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Inamisha kichwa chako kiasi."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Geuza kichwa chako kidogo."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Imeshindwa kutambua uso. Jaribu tena."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Badilisha nafasi ya kichwa chako kidogo"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Angalia simu yako moja kwa moja"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Angalia simu yako moja kwa moja"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Angalia simu yako moja kwa moja"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Ondoa kitu chochote kinachoficha uso wako."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Safisha sehemu ya juu ya skrini yako, ikiwa ni pamoja na upau mweusi"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Ni lazima uso wako wote uonekane"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Ni lazima uso wako wote uonekane"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Imeshindwa kuunda muundo wa uso wako. Jaribu tena."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Vioo vyeusi vimetambuliwa. Ni lazima uso wako wote uonekane."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Kifuniko cha uso kimetambuliwa. Ni lazima uso wako wote uonekane."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Imeshindwa kuthibitisha uso. Maunzi hayapatikani."</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 6c889f9a2378..f657bd7620b5 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"கைரேகை அன்லாக்"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"கைரேகை சென்சாரைப் பயன்படுத்த முடியவில்லை"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"பழுதுபார்ப்புச் சேவை வழங்குநரைத் தொடர்புகொள்ளவும்."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"முகம் தெளிவாகப் பதிவாகவில்லை. மீண்டும் முயலவும்."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"முகத் தோற்றம் பதிவாகவில்லை. மீண்டும் முயலவும்."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"அதிக ஒளிர்வு. மிதமான ஒளியில் முயலவும்."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"இருட்டாக உள்ளது. பிரகாசமான ஒளியில் முயலவும்."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"மொபைலை முகத்தில் இருந்து தள்ளிப் பிடிக்கவும்."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"மொபைலை அருகில் நகர்த்தவும்."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"மொபைலை மேலே நகர்த்தவும்."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"மொபைலைக் கீழே நகர்த்தவும்."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"மொபைலை இடப்புறம் நகர்த்தவும்."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"மொபைலை வலப்புறம் நகர்த்தவும்."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"பிரகாசமான ஒளியில் முயலவும்"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"மொபைலை முகத்தில் இருந்து தள்ளிப் பிடிக்கவும்"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"மொபைலை அருகில் நகர்த்தவும்"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"மொபைலை மேலே நகர்த்தவும்"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"மொபைலைக் கீழே நகர்த்தவும்"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"மொபைலை இடதுபுறம் நகர்த்தவும்"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"மொபைலை வலதுபுறம் நகர்த்தவும்"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"முழுமுகம் தெரியுமாறு நேராகப் பார்க்கவும்."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"முகத்தை மொபைலுக்கு நேராக வைக்கவும்."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"முகம் சரியாகத் தெரியவில்லை. மொபைலைக் கண்களுக்கு நேராகப் பிடிக்கவும்."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"அதிகமாக அசைகிறது. மொபைலை அசைக்காமல் பிடிக்கவும்."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"உங்கள் முகத்தை மீண்டும் பதிவுசெய்யுங்கள்."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"முகத்தைக் கண்டறிய இயலவில்லை. மீண்டும் முயலவும்."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"மீண்டும் அதே போஸ் தருகிறீர்கள், வேறு முயலுங்கள்."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"தலையை லேசாகத் திருப்பவும்."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"உங்கள் தலையை லேசாகச் சாய்க்கவும்."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"உங்கள் தலையைச் சற்றுத் திருப்பவும்."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"முகத்தை அடையாளம் காண இயலவில்லை. மீண்டும் முயலவும்."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"தலையின் நிலையைச் சிறிதளவு மாற்றவும்"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"உங்கள் மொபைலை நேராகப் பார்க்கவும்"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"உங்கள் மொபைலை நேராகப் பார்க்கவும்"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"உங்கள் மொபைலை நேராகப் பார்க்கவும்"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"உங்கள் முகத்தை மறைக்கும் அனைத்தையும் நீக்குக."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"திரையையும் அதிலுள்ள கருப்புப் பட்டியையும் சுத்தம் செய்யவும்"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"உங்கள் முகத்தை முழுமையாகக் காட்டவும்"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"உங்கள் முகத்தை முழுமையாகக் காட்டவும்"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"முகத் தோற்றம் பதிவாகவில்லை. மீண்டும் முயலவும்."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"அடர் நிறக் கண்ணாடிகள் கண்டறியப்பட்டுள்ளது. உங்கள் முகத்தை முழுமையாகக் காட்டவும்."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"முகம் மறைக்கப்பட்டுள்ளது. உங்கள் முகத்தை முழுமையாகக் காட்டவும்."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"முகத்தைச் சரிபார்க்க இயலவில்லை. வன்பொருள் இல்லை."</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 4332b50e7871..5577d1667895 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"వేలిముద్ర అన్లాక్"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"వేలిముద్ర సెన్సార్ను ఉపయోగించడం సాధ్యం కాదు"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"రిపెయిర్ ప్రొవైడర్ను సందర్శించండి."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"ముఖం డేటా సరిగ్గా రాలేదు. మళ్లీ ప్రయత్నించండి."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"మీ ఫేస్మోడల్ క్రియేషన్ కుదరదు. మళ్లీ ట్రై చేయండి."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"వెలుతురు అధికంగా ఉంది. తక్కువ ఉండేలా చూడండి."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"చాలా చీకటిగా ఉంది. బాగా వెలుతురులో ప్రయత్నించండి."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"ఫోన్ను కాస్త దూరంగా పట్టుకోండి."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"ఫోన్ను దగ్గరగా పట్టుకోండి"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ఫోన్ను పైకి పట్టుకోండి."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ఫోన్ను కిందికి దించండి."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"ఫోన్ను ఎడమవైపునకు జరపండి."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"ఫోన్ను కుడివైపునకు జరపండి."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"ప్రకాశవంతమైన లైటింగ్లో ట్రై చేయండి"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ఫోన్ను కాస్త దూరంగా జరపండి"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ఫోన్ను దగ్గరగా పట్టుకోండి"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ఫోన్ను పైకి పట్టుకోండి"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ఫోన్ను కిందికి దించండి"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"ఫోన్ను మీ ఎడమ వైపునకు జరపండి"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"ఫోన్ను మీ కుడి వైపునకు జరపండి"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"దయచేసి మీ పరికరం వైపు మరింత నేరుగా చూడండి."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"మీ ముఖాన్ని ఫోన్కు ఎదురుగా ఉంచండి."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"మీ ముఖం కనిపించడం లేదు. మీ ఫోన్ను కంటి స్థాయిలో పట్టుకోండి."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"బాగా కదుపుతున్నారు. ఫోన్ను స్థిరంగా పట్టుకోండి"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"దయచేసి మీ ముఖాన్ని మళ్లీ నమోదు చేయండి."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"ఇక ముఖం గుర్తించలేదు. మళ్లీ ప్రయత్నించండి."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"ఒకే మాదిరిగా ఉంది, దయచేసి భంగిమను మార్చండి."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"మీ తలను ఇంకాస్త తక్కువ తిప్పండి."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"మీ తలను కొంచెం తక్కువగా వంపండి."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"మీ తలను ఎడమ/కుడి వైపుగా ఇంకాస్త తిప్పండి."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"ముఖం గుర్తించబడలేదు. మళ్లీ ట్రై చేయండి."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"మీ తల స్థానాన్ని కొద్దిగా మార్చండి"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"మీ ఫోన్ వైపు మరింత నేరుగా చూడండి"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"మీ ఫోన్ వైపు మరింత నేరుగా చూడండి"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"మీ ఫోన్ వైపు మరింత నేరుగా చూడండి"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"మీ ముఖానికి అడ్డుగా ఉన్నవాటిని తీసివేయండి."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"నల్లని బార్తో సహా మీ స్క్రీన్ పైభాగం అంతటినీ శుభ్రంగా తుడవండి"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"మీ ముఖం పూర్తిగా కనిపించాలి"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"మీ ముఖం పూర్తిగా కనిపించాలి"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"మీ ఫేస్మోడల్ క్రియేషన్ కుదరదు. మళ్లీ ట్రై చేయండి."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"డార్క్ గ్లాసెస్ గుర్తించబడ్డాయి. మీ ముఖం పూర్తిగా కనిపించాలి."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ముఖం కవర్ చేయబడింది. మీ ముఖం పూర్తిగా కనిపించాలి."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"ముఖం ధృవీకరించలేరు. హార్డ్వేర్ అందుబాటులో లేదు."</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index b0576b856b34..27436e14325e 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ปลดล็อกด้วยลายนิ้วมือ"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"ใช้เซ็นเซอร์ลายนิ้วมือไม่ได้"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"โปรดติดต่อผู้ให้บริการซ่อม"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"บันทึกข้อมูลใบหน้าที่ถูกต้องไม่ได้ ลองอีกครั้ง"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"สร้างรูปแบบใบหน้าไม่ได้ โปรดลองอีกครั้ง"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"สว่างเกินไป ลองหาตำแหน่งที่แสงน้อยกว่านี้"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"มืดเกินไป ลองหาตำแหน่งที่สว่างขึ้น"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"เลื่อนโทรศัพท์ออกไปไกลกว่านี้"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"เลื่อนโทรศัพท์เข้าไปใกล้กว่านี้"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"ยกโทรศัพท์ให้สูงขึ้น"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"ถือโทรศัพท์ให้ต่ำลง"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"เลื่อนโทรศัพท์ไปทางซ้าย"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"เลื่อนโทรศัพท์ไปทางขวา"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"ลองหาตำแหน่งที่สว่างขึ้น"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"ถือโทรศัพท์ให้ห่างกว่านี้"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"ถือโทรศัพท์ให้ใกล้กว่านี้"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"ยกโทรศัพท์ให้สูงขึ้น"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"ถือโทรศัพท์ให้ต่ำลง"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"เลื่อนโทรศัพท์ไปทางซ้าย"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"เลื่อนโทรศัพท์ไปทางขวา"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"โปรดมองตรงมาที่อุปกรณ์"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"หันหน้าให้ตรงกับโทรศัพท์"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"ไม่เห็นใบหน้า ถือโทรศัพท์ไว้ที่ระดับสายตา"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"มีการเคลื่อนไหวมากเกินไป ถือโทรศัพท์นิ่งๆ"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"โปรดลงทะเบียนใบหน้าอีกครั้ง"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"จำใบหน้าไม่ได้แล้ว ลองอีกครั้ง"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"ใกล้เคียงเกินไป โปรดเปลี่ยนท่าโพส"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"จัดตำแหน่งศีรษะให้ตรง"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"ปรับมุมศีรษะให้ตรง"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"จัดตำแหน่งศีรษะให้ตรง"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"ไม่รู้จักใบหน้า โปรดลองอีกครั้ง"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"เปลี่ยนตำแหน่งของศีรษะเล็กน้อย"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"โปรดมองตรงมาที่โทรศัพท์"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"โปรดมองตรงมาที่โทรศัพท์"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"โปรดมองตรงมาที่โทรศัพท์"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"เอาสิ่งที่ปิดบังใบหน้าออก"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ทำความสะอาดด้านบนของหน้าจอ รวมถึงแถบสีดำ"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ต้องมองเห็นใบหน้าของคุณทั้งหมด"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ต้องมองเห็นใบหน้าของคุณทั้งหมด"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"สร้างรูปแบบใบหน้าไม่ได้ โปรดลองอีกครั้ง"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ตรวจพบแว่นตาดำ ต้องมองเห็นใบหน้าของคุณทั้งหมด"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ตรวจพบหน้ากากอนามัย ต้องมองเห็นใบหน้าของคุณทั้งหมด"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"ยืนยันใบหน้าไม่ได้ ฮาร์ดแวร์ไม่พร้อมใช้งาน"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 17085e72f30c..0383ae673253 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Pag-unlock Gamit ang Fingerprint"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Hindi magamit ang sensor para sa fingerprint"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Bumisita sa provider ng pag-aayos."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Hindi makakuha ng tamang face data. Subukang muli."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Hindi magawa ang iyong face model. Subukan ulit."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Masyadong maliwanag. Subukang bawasan ang liwanag."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Masyadong madilim. Subukan sa mas maliwanag."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Ilayo pa ang telepono."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Ilapit pa ang telepono."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Itaas pa ang telepono."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Ibaba pa ang telepono."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Igalaw ang telepono pakaliwa."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Igalaw ang telepono pakanan."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Subukan sa mas maliwanag"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Ilayo pa ang telepono"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Ilapit pa ang telepono"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Itaas pa ang telepono"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Ibaba pa ang telepono"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Iusog pakaliwa ang telepono mo"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Iusog pakanan ang telepono mo"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Tumingin nang mas direkta sa iyong device."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Itapat ang mukha mo sa mismong harap ng telepono."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Hindi makita ang mukha mo. Hawakan ang telepono mo nang kapantay ng mata."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Masyadong magalaw. Hawakang mabuti ang telepono."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Paki-enroll muli ang iyong mukha."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Hindi na makilala ang mukha. Subukang muli."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Masyadong magkatulad, pakibago ang pose mo."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Huwag masyadong lumingon."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Bawasan ang pag-tilt ng iyong ulo."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Huwag masyadong lumingon."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Hindi makilala ang mukha. Subukan ulit."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Bahagyang baguhin ang posisyon ng iyong ulo"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Tumingin nang mas direkta sa iyong telepono"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Tumingin nang mas direkta sa iyong telepono"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Tumingin nang mas direkta sa iyong telepono"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Alisin ang anumang humaharang sa iyong mukha."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Linisin ang itaas ng iyong screen, kasama ang itim na bar"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Dapat ganap na nakikita ang iyong mukha"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Dapat ganap na nakikita ang iyong mukha"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Hindi magawa ang iyong face model. Subukan ulit."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"May na-detect na madilim na salamin. Dapat ganap na nakikita ang iyong mukha."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"May na-detect na pantakip sa mukha. Dapat ganap na nakikita ang iyong mukha."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Di ma-verify ang mukha. Di available ang hardware."</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 0bee062367f4..c67d8fbb82ba 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Parmak İzi Kilidi"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Parmak izi sensörü kullanılamıyor"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Bir onarım hizmeti sağlayıcıyı ziyaret edin."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Doğru yüz verileri yakalanamadı. Tekrar deneyin."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Yüzünüzün modeli oluşturulamıyor. Tekrar deneyin."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Çok parlak. Parlaklığı daha az bir ışıklandırma deneyin."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Çok karanlık. Daha parlak ışıkta deneyin."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Telefonu uzaklaştırın."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Telefonu yaklaştırın."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Telefonu yukarı kaldırın."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Telefonu aşağı indirin."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Telefonu sola hareket ettirin."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Telefonu sağa hareket ettirin."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Daha parlak ışıkta deneyin"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Telefonu uzaklaştırın"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Telefonu yaklaştırın"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefonu daha yukarı kaldırın"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefonu daha aşağı indirin"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Telefonu solunuza kaydırın"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Telefonu sağınıza kaydırın"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Lütfen cihazınıza daha doğrudan bakın."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Yüzünüz telefonun tam karşısına gelmelidir."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Yüzünüz görünmüyor. Telefonunuzu göz hizasında tutun."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Çok fazla hareket ediyorsunuz. Telefonu sabit tutun."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Lütfen yüzünüzü yeniden kaydedin."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Yüz artık tanınamıyor. Tekrar deneyin."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Duruşunuz çok benzer, lütfen pozunuzu değiştirin."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Başınızı biraz daha az çevirin."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Başınızı biraz daha az eğin."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Başınızı biraz daha az çevirin."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Yüz tanınamadı. Tekrar deneyin."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Başınızın konumunu hafifçe değiştirin"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Telefonunuza daha doğrudan bakın"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Telefonunuza daha doğrudan bakın"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Telefonunuza daha doğrudan bakın"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Yüzünüzün görünmesini engelleyen şeyleri kaldırın."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Siyah çubuk da dahil olmak üzere ekranınızın üst kısmını temizleyin"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Yüzünüz tamamen görünür olmalıdır"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Yüzünüz tamamen görünür olmalıdır"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Yüzünüzün modeli oluşturulamıyor. Tekrar deneyin."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Koyu renk gözlükler algılandı. Yüzünüz tamamen görünür olmalıdır."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Yüzünüzü kapattığınız algılandı. Yüzünüz tamamen görünür olmalıdır."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Yüz doğrulanamıyor. Donanım kullanılamıyor."</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index c86d11cb5317..17e86fac1376 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -636,26 +636,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Розблокування відбитком пальця"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Не вдається скористатися сканером відбитків пальців"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Зверніться до постачальника послуг із ремонту."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Не вдалося чітко зняти обличчя. Повторіть спробу."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Модель обличчя не створено. Повторіть спробу."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Занадто яскраво. Потрібно менше світла."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Занадто темно. Потрібно більше світла."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Тримайте телефон далі від обличчя."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Тримайте телефон ближче до обличчя."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Тримайте телефон вище."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Тримайте телефон нижче."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Посуньте телефон лівіше."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Посуньте телефон правіше."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Потрібно більше світла"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Тримайте телефон далі від обличчя"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Тримайте телефон ближче до обличчя"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Підніміть телефон вище"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Опустіть телефон нижче"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Посуньте телефон лівіше"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Посуньте телефон правіше"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Дивіться просто на пристрій."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Тримайте телефон просто перед обличчям."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Обличчя не видно. Утримуйте телефон на рівні очей."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Забагато рухів. Тримайте телефон нерухомо."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Повторно проскануйте обличчя."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Розпізнати обличчя вже не вдається. Повторіть спробу."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Надто схоже на попередню спробу, змініть позу."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Трохи перемістіть обличчя."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Трохи зменште нахил голови."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Трохи поверніть обличчя."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Обличчя не розпізнано. Повторіть спробу."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Трохи змініть положення голови"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Дивіться на телефон прямо"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Дивіться на телефон прямо"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Дивіться на телефон прямо"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Приберіть об’єкти, які затуляють ваше обличчя."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Очистьте верхню частину екрана, зокрема чорну панель"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Обличчя має бути видно повністю"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Обличчя має бути видно повністю"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Не вдається створити модель обличчя. Повторіть спробу."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Виявлено темні окуляри. Обличчя має бути видно повністю."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Виявлено аксесуар, який закриває обличчя. Обличчя має бути видно повністю."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Не вдається перевірити обличчя. Апаратне забезпечення недоступне."</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index 1adb937e6fd5..84476f99b9fa 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"فنگر پرنٹ اَن لاک"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"فنگر پرنٹ سینسر کا استعمال نہیں کر سکتے"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ایک مرمت فراہم کنندہ کو ملاحظہ کریں۔"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"چہرے کا درست ڈيٹا کیپچر نہیں ہو سکا۔ پھر آزمائيں۔"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"آپکے چہرے کا ماڈل تخلیق نہیں ہو سکا۔ پھر کوشش کریں۔"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"کافی روشنی ہے۔ ہلکی روشنی میں آزمائیں۔"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"کافی اندھیرا ہے۔ تیز روشنی میں آزمائیں۔"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"فون کو تھوڑا دور کریں۔"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"فون کو تھوڑا قریب کریں۔"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"فون کو تھوڑا اوپر لے جائیں۔"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"فون تھوڑا نیچے کریں۔"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"فون کو بائیں جانب لے جائيں۔"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"فون کو دائیں جانب لے جائیں۔"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"تیز روشنی میں آزمائیں"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"فون کو تھوڑا دور کریں"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"فون کو تھوڑا قریب کریں"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"فون کو تھوڑا اوپر لے جائیں"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"فون تھوڑا نیچے کریں"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"فون کو اپنی بائیں جانب لے جائیں"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"فون کو اپنی دائیں جانب لے جائیں"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"براہ کرم اپنے آلہ کی طرف چہرے کو سیدھا رکھیں۔"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"اپنے چہرے کو براہ راست فون کے سامنے رکھیں۔"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"آپ کا چہرہ دکھائی نہیں دے رہا۔ اپنے فون کو آنکھ کی سطح پر پکڑیں۔"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"کافی حرکت ہو رہی ہے۔ فون کو مضبوطی سے پکڑیں۔"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"براہ کرم اپنے چہرے کو دوبارہ مندرج کریں۔"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"اب چہرے کی شناخت نہیں کر سکتے۔ پھر آزمائيں۔"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"کافی ملتا جلتا ہے، براہ کرم اپنا پوز بدلیں۔"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"اپنا سر تھوڑا کم کریں۔"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"اپنا سر تھوڑا کم جھکائیں۔"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"اپنا سر تھوڑا کم کریں۔"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"چہرے کی شناخت نہیں ہو سکی۔ پھر کوشش کریں۔"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"اپنے سر کی پوزیشن کو تھوڑا تبدیل کریں"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"اپنے فون کی طرف چہرے کو سیدھا رکھیں"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"اپنے فون کی طرف چہرے کو سیدھا رکھیں"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"اپنے فون کی طرف چہرے کو سیدھا رکھیں"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"آپ کے چہرہ کو چھپانے والی ہر چیز کو ہٹائیں۔"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"سیاہ بار سمیت، اپنی اسکرین کے اوپری حصے کو صاف کریں"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"آپ کا چہرہ مکمل طور پر دکھائی دینا ضروری ہے"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"آپ کا چہرہ مکمل طور پر دکھائی دینا ضروری ہے"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"آپکے چہرے کا ماڈل تخلیق نہیں ہو سکا۔ پھر کوشش کریں۔"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"گہرے چشمے کا پتہ چلا۔ آپ کا چہرہ مکمل طور پر دکھائی دینا ضروری ہے۔"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"چہرے کو ڈھانپنے کا پتہ چلا۔ آپ کا چہرہ مکمل طور پر دکھائی دینا ضروری ہے۔"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"چہرے کی توثیق نہیں کی جا سکی۔ ہارڈ ویئر دستیاب نہیں ہے۔"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 2d814a1422f5..247ca775dec3 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Barmoq izi bilan ochish"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Barmoq izi skaneridan foydalanish imkonsiz"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Xizmat koʻrsatish markaziga murojaat qiling."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Yuz ravshan suratga olinmadi. Qaytadan urining."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Yuzingiz modeli yaratilmadi. Qayta urining."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Juda yorqin. Biroz soyaroq joy tanlang."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Juda qorongʻi. Atrofingizni yoriting."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Telefonni biroz uzoqroq tuting."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Telefonni yaqinroq tuting."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Telefonni teparoq tuting."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Telefonni pastroq tushiring."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Telefonni chapga suring."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Telefonni oʻngga suring."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Atrofingizni yanada yoriting"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Telefonni biroz uzoqroq tuting"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Telefonni yaqinroq tuting"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefonni teparoq tuting"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefonni pastroq tuting"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Telefonni chaproq tuting"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Telefonni oʻngroq tuting"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Qurilmaga tik qarang."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Telefonni yuzingizga tik qarating."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Yuzingiz koʻrinmayapti. Telefonni koʻz balandligida tuting."</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Ortiqcha harakatlanmoqda. Qimirlatmasdan ushlang."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Yuzingizni qaytadan qayd qildiring."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Yuz tanilmadi. Qaytadan urining."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Yuz ifodasi oldingiday. Holatingizni oʻzgartiring."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Boshingizni asta buring."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Boshingizni asta qiyalang."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Boshingizni asta buring."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Yuz aniqlanmadi. Qayta urining."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Boshingiz holatini biroz oʻzgartiring"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Telefonga tik qarab turing"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Telefonga tik qarab turing"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Telefonga tik qarab turing"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Yuzingizni berkitayotgan narsalarni olib tashlang."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Ekranning yuqori qismini, shuningdek, qora panelni ham tozalang"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Yuzingiz toʻliq koʻrinishi kerak"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Yuzingiz toʻliq koʻrinishi kerak"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Yuzingiz modeli yaratilmadi. Qayta urining."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Qora koʻzoynak aniqlandi. Yuzingiz toʻliq koʻrinishi kerak."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Yuzning bir qismi yopilib qolgan. Yuzingiz toʻliq koʻrinishi kerak."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Yuzingiz tasdiqlanmadi. Qurilma ishlamayapti."</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index ce47bc509826..4df2c224706d 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Mở khóa bằng vân tay"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Không thể dùng cảm biến vân tay"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Hãy liên hệ với một nhà cung cấp dịch vụ sửa chữa."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Không thể ghi lại đúng dữ liệu mặt. Hãy thử lại."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Không thể tạo mẫu khuôn mặt của bạn. Hãy thử lại."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Quá sáng. Hãy thử giảm độ sáng."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Quá tối. Hãy thử tăng độ sáng."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Đưa điện thoại ra xa hơn."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Đưa điện thoại lại gần hơn."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Nâng điện thoại lên cao hơn."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Hạ thấp điện thoại xuống."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Đưa điện thoại sang bên trái."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Đưa điện thoại sang bên phải."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Hãy thử tăng độ sáng"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Đưa điện thoại ra xa hơn"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Đưa điện thoại lại gần hơn"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Nâng điện thoại lên cao hơn"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Hạ thấp điện thoại xuống"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Đưa điện thoại sang bên trái"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Đưa điện thoại sang bên phải"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Vui lòng nhìn thẳng vào thiết bị."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Hướng thẳng khuôn mặt về phía trước điện thoại."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Không phát hiện thấy khuôn mặt của bạn. Hãy cầm điện thoại ngang tầm mắt"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Thiết bị di chuyển quá nhiều. Giữ yên thiết bị."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Vui lòng đăng ký lại khuôn mặt của bạn."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Không nhận ra khuôn mặt. Hãy thử lại."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Khuôn mặt quá giống nhau, vui lòng đổi tư thế."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Hãy bớt di chuyển đầu."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Hãy bớt ngửa hoặc cúi đầu."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Hãy bớt di chuyển đầu."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Không thể nhận dạng khuôn mặt. Hãy thử lại."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Nghiêng đầu của bạn một chút"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Nhìn thẳng vào điện thoại"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Nhìn thẳng vào điện thoại"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Nhìn thẳng vào điện thoại"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Hãy loại bỏ mọi thứ che khuất khuôn mặt bạn."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Vệ sinh phần đầu màn hình, bao gồm cả thanh màu đen"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Bạn cần cho thấy toàn bộ khuôn mặt của mình"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Toàn bộ khuôn mặt của bạn phải được hiển thị"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Không thể tạo mẫu khuôn mặt của bạn. Hãy thử lại."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Đã phát hiện thấy kính râm. Toàn bộ khuôn mặt của bạn phải được trông thấy rõ ràng."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Đã phát hiện khuôn mặt bị che khuất. Toàn bộ khuôn mặt của bạn phải được hiển thị."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Không thể xác minh khuôn mặt. Phần cứng không có sẵn."</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 418b95cf68de..d765869b941b 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"指纹解锁"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"无法使用指纹传感器"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"请联系维修服务提供商。"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"无法捕获准确的人脸数据,请重试。"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"无法创建您的脸部模型,请重试。"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"亮度过高,请尝试使用较柔和的亮度。"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"亮度不足,请尝试将光线调亮。"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"请将手机拿远一点。"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"请将手机拿近一点。"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"请将手机举高一点。"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"请将手机拿低一点。"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"请将手机向左移动。"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"请将手机向右移动。"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"请尝试调亮光线"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"请将手机拿远一点"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"请将手机拿近一点"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"请将手机举高一点"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"请将手机拿低一点"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"请将手机向左移动"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"请将手机向右移动"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"请直视您的设备。"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"请将你的面部正对手机。"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"看不清您的脸部,请将手机举到与眼睛齐平的位置。"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"摄像头过于晃动。请将手机拿稳。"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"请重新注册您的面孔。"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"已无法识别人脸,请重试。"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"与先前的姿势太相近,请换一个姿势。"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"请将您的头稍微上下倾斜。"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"请稍微抬头或低头。"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"请将您的头稍微左右旋转。"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"无法识别人脸,请重试。"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"请略微调整头部的位置"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"请尽量直视手机"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"请尽量直视手机"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"请尽量直视手机"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"请移除所有遮挡您面部的物体。"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"请将屏幕顶部(包括黑色条栏)清理干净"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"您的脸部必须完全可见"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"您的脸部必须完全可见"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"无法创建您的脸部模型,请重试。"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"检测到墨镜,您的脸部必须完全可见。"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"检测到脸部有遮挡物,您的脸部必须完全可见。"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"无法验证人脸。硬件无法使用。"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index eac22644a293..a1adb054b2db 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"指紋解鎖"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"無法使用指紋感應器"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"請諮詢維修服務供應商。"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"無法擷取準確的臉容資料。請再試一次。"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"無法建立面部模型,請再試一次。"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"影像太亮。請嘗試在更暗的環境下使用。"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"影像太暗。請嘗試在更明亮的環境下使用。"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"請將手機移遠一點。"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"請將手機移近一點。"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"請將手機向上移。"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"請將手機向下移。"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"請將手機向左移。"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"請將手機向右移。"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"請試用更充足的光線"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"請將手機移開一點"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"請將手機移近一點"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"請將手機向上移"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"請將手機向下移"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"請將手機向左移"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"請將手機向右移"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"請以更直視的角度看著裝置。"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"將手機對準您的面孔正面。"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"看不到面孔,請將手機放在視線水平。"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"裝置不夠穩定。請拿穩手機。"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"請重新註冊面孔。"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"無法再識別面孔。請再試一次。"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"面孔位置太相近,請改變您的姿勢。"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"減少頭部左右轉動幅度。"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"減少頭部傾斜幅度。"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"減少頭部左右轉動幅度。"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"無法辨識面孔,請再試一次。"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"請稍為轉換頭部的位置"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"盡可能直視手機"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"請正面望向手機"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"盡可能直視手機"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"移開遮住面孔的任何物件。"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"請清理螢幕頂部,包括黑色列"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"必須展示整個面孔"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"您必須展示整個面孔。"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"無法建立面部模型,請再試一次。"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"偵測到深色眼鏡。您必須展示整個面孔。"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"偵測到面部遮蓋物。您必須展示整個面孔。"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"無法驗證面孔,硬件無法使用。"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 76bccc862d74..627a9a9194fd 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"指紋解鎖"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"指紋感應器無法使用"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"請洽詢維修供應商。"</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"無法擷取精準臉孔資料,請再試一次。"</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"無法建立臉部模型,請再試一次。"</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"亮度過高,請嘗試使用較柔和的照明方式。"</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"亮度不足,請嘗試使用較明亮的照明方式。"</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"請將手機拿遠一點。"</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"請將手機拿近一點。"</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"請將手機舉高一點。"</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"請將手機拿低一點。"</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"請將手機向左移動。"</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"請將手機向右移動。"</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"請採用更明亮的光源"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"請將手機拿遠一點"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"請將手機拿近一點"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"請將手機舉高一點"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"請將手機拿低一點"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"請將手機向左移"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"請將手機向右移"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"請儘可能直視裝置正面。"</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"將你的臉孔正對手機。"</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"未偵測到你的臉,請將手機舉到與視線同高。"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"鏡頭過度晃動,請拿穩手機。"</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"請重新註冊你的臉孔。"</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"已無法辨識臉孔,請再試一次。"</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"與先前的姿勢太相似,請換一個姿勢。"</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"請將你的頭部稍微向左或向右轉動。"</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"請稍微抬頭或低頭。"</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"請將你的頭部稍微向左或向右旋轉。"</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"無法辨識這張臉,請再試一次。"</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"請稍微改變頭部位置"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"請盡可能直視手機"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"請盡可能直視手機"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"請盡可能直視手機"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"請移除任何會遮住臉孔的物體。"</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"請清理螢幕頂端,包括黑色橫列"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"請露出整張臉"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"請露出整張臉"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"無法建立臉部模型,請再試一次。"</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"偵測到墨鏡,請露出整張臉。"</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"偵測到有物品遮住臉,請露出整張臉。"</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"相關硬體無法使用,因此無法驗證臉孔。"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index d6f4e3dfb390..381f864adf63 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -634,26 +634,31 @@ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Ukuvula ngesigxivizo somunwe"</string> <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Ayikwazi ukusebenzisa inzwa yesigxivizo somunwe"</string> <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Vakashela umhlinzeki wokulungisa."</string> - <string name="face_acquired_insufficient" msgid="2150805835949162453">"Ayikwazanga ukuthwebula idatha enembile yobuso. Zama futhi."</string> + <string name="face_acquired_insufficient" msgid="6889245852748492218">"Ayikwazi ukusungula imodeli yobuso bakho. Zama futhi."</string> <string name="face_acquired_too_bright" msgid="8070756048978079164">"Kukhanya kakhulu. Zama ukukhanya okuthambile."</string> - <string name="face_acquired_too_dark" msgid="252573548464426546">"Kumnyama kakhulu Zama ukukhanyisa okukhudlwana."</string> - <string name="face_acquired_too_close" msgid="1628767882971469833">"Hambisa ifoni kude."</string> - <string name="face_acquired_too_far" msgid="5098567726427173896">"Sondeza ifoni eduze."</string> - <string name="face_acquired_too_high" msgid="4868033653626081839">"Hambisa ifoni phezulu."</string> - <string name="face_acquired_too_low" msgid="1512237819632165945">"Hambisa ifoni ngaphansi."</string> - <string name="face_acquired_too_right" msgid="2513391513020932655">"Hambisa ifoni ngakwesokunxele."</string> - <string name="face_acquired_too_left" msgid="8882499346502714350">"Hambisa ifoni ngakwesokudla."</string> + <string name="face_acquired_too_dark" msgid="7919016380747701228">"Zama ukukhanyisa okukhudlwana"</string> + <string name="face_acquired_too_close" msgid="4453646176196302462">"Yisa ifoni kude"</string> + <string name="face_acquired_too_far" msgid="2922278214231064859">"Sondeza ifoni eduze"</string> + <string name="face_acquired_too_high" msgid="8278815780046368576">"Yisa ifoni phezulu"</string> + <string name="face_acquired_too_low" msgid="4075391872960840081">"Yisa ifoni phansi"</string> + <string name="face_acquired_too_right" msgid="6245286514593540859">"Yisa ifoni ngakwesokunxele sakho"</string> + <string name="face_acquired_too_left" msgid="9201762240918405486">"Yisa ifoni ngakwesokudla sakho"</string> <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Sicela ubheke ngokuqondile kakhulu kudivayisi yakho."</string> - <string name="face_acquired_not_detected" msgid="2945945257956443257">"Beka ubuso bakho ngqo phambi kwefoni."</string> + <string name="face_acquired_not_detected" msgid="1057966913397548150">"Ayikwazi ukubona ubuso bakho. Bamba ifoni yakho iqondane namehlo"</string> <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Ukunyakaza okuningi kakhulu. Bamba ifoni iqine."</string> <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Sicela uphinde ubhalise ubuso bakho."</string> - <string name="face_acquired_too_different" msgid="4699657338753282542">"Ayisakwazi ukubona ubuso. Zama futhi."</string> - <string name="face_acquired_too_similar" msgid="7684650785108399370">"Kufana kakhulu, sicela ushintshe ukuma kwakho."</string> - <string name="face_acquired_pan_too_extreme" msgid="7822191262299152527">"Jikisa ikhanda lakho kancane."</string> - <string name="face_acquired_tilt_too_extreme" msgid="8618210742620248049">"Tshekisa kancane ikhanda lakho."</string> - <string name="face_acquired_roll_too_extreme" msgid="1442830503572636825">"Jikisa ikhanda lakho kancane."</string> + <string name="face_acquired_too_different" msgid="2520389515612972889">"Ayikwazi ukubona ubuso. Zama futhi."</string> + <string name="face_acquired_too_similar" msgid="8882920552674125694">"Shintsha indawo yekhanda lakho kancane"</string> + <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Bheka ngqo kakhulu kufoni yakho"</string> + <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Bheka ngqo kakhulu kufoni yakho"</string> + <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Bheka ngqo kakhulu kufoni yakho"</string> <string name="face_acquired_obscured" msgid="4917643294953326639">"Susa noma yini efihle ubuso bakho."</string> <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Hlanza okuphezulu kwesikrini sakho, kufaka phakathi ibha emnyama"</string> + <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Ubuso bakho kufanele bubonakale ngokugcwele"</string> + <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Ubuso bakho kufanele bubonakale ngokugcwele"</string> + <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Ayikwazi ukusungula imodeli yobuso bakho. Zama futhi."</string> + <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Kutholwe izibuko ezimnyama. Ubuso bakho kufanele bubonakale ngokugcwele."</string> + <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Kutholwe ukumbozwa kobuso. Ubuso bakho kufanele bubonakale ngokugcwele."</string> <string-array name="face_acquired_vendor"> </string-array> <string name="face_error_hw_not_available" msgid="5085202213036026288">"Ayikwazi ukuqinisekisa ubuso. Izingxenyekazi zekhompyutha azitholakali."</string> diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml index fe296c704095..5fd9dc0ca798 100644 --- a/core/res/res/values/bools.xml +++ b/core/res/res/values/bools.xml @@ -30,4 +30,5 @@ lockscreen, setting this to true should come with customized drawables. --> <bool name="use_lock_pattern_drawable">false</bool> <bool name="resolver_landscape_phone">true</bool> + <bool name="system_server_plays_face_haptics">true</bool> </resources> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index e5d90f00f327..c6b60f586047 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1798,45 +1798,57 @@ <string name="fingerprint_recalibrate_notification_content">Visit a repair provider.</string> <!-- Message shown during face acquisition when the face cannot be recognized [CHAR LIMIT=50] --> - <string name="face_acquired_insufficient">Couldn\u2019t capture accurate face data. Try again.</string> + <string name="face_acquired_insufficient">Can\u2019t create your face model. Try again.</string> <!-- Message shown during face acquisition when the image is too bright [CHAR LIMIT=50] --> <string name="face_acquired_too_bright">Too bright. Try gentler lighting.</string> <!-- Message shown during face acquisition when the image is too dark [CHAR LIMIT=50] --> - <string name="face_acquired_too_dark">Too dark. Try brighter lighting.</string> + <string name="face_acquired_too_dark">Try brighter lighting</string> <!-- Message shown during face acquisition when the user is too close to sensor [CHAR LIMIT=50] --> - <string name="face_acquired_too_close">Move phone farther away.</string> + <string name="face_acquired_too_close">Move phone farther away</string> <!-- Message shown during face acquisition when the user is too far from sensor [CHAR LIMIT=50] --> - <string name="face_acquired_too_far">Move phone closer.</string> + <string name="face_acquired_too_far">Move phone closer</string> <!-- Message shown during face acquisition when the user is too high relatively to sensor [CHAR LIMIT=50] --> - <string name="face_acquired_too_high">Move phone higher.</string> + <string name="face_acquired_too_high">Move phone higher</string> <!-- Message shown during face acquisition when the user is too low relatively to sensor [CHAR LIMIT=50] --> - <string name="face_acquired_too_low">Move phone lower.</string> + <string name="face_acquired_too_low">Move phone lower</string> <!-- Message shown during face acquisition when only the right part of the user's face was detected [CHAR LIMIT=50] --> - <string name="face_acquired_too_right">Move phone to the left.</string> + <string name="face_acquired_too_right">Move phone to your left</string> <!-- Message shown during face acquisition when only the left part of the user's face was detected [CHAR LIMIT=50] --> - <string name="face_acquired_too_left">Move phone to the right.</string> + <string name="face_acquired_too_left">Move phone to your right</string> <!-- Message shown during face acquisition when the user is not front facing the sensor [CHAR LIMIT=50] --> <string name="face_acquired_poor_gaze">Please look more directly at your device.</string> - <!-- Message shown during face acquisition when the user is not detected [CHAR LIMIT=50] --> - <string name="face_acquired_not_detected">Position your face directly in front of the phone.</string> + <!-- Message shown during face acquisition when the user is not detected [CHAR LIMIT=75] --> + <string name="face_acquired_not_detected">Can\u2019t see your face. Hold your phone at eye level.</string> <!-- Message shown during face acquisition when the device is not steady [CHAR LIMIT=50] --> <string name="face_acquired_too_much_motion">Too much motion. Hold phone steady.</string> <!-- Message shown during face acquisition when the sensor needs to be recalibrated [CHAR LIMIT=50] --> <string name="face_acquired_recalibrate">Please re-enroll your face.</string> <!-- Message shown during face enrollment when a different person's face is detected [CHAR LIMIT=50] --> - <string name="face_acquired_too_different">No longer able to recognize face. Try again.</string> + <string name="face_acquired_too_different">Can\u2019t recognize face. Try again.</string> <!-- Message shown during face enrollment when the face is too similar to a previous acquisition [CHAR LIMIT=50] --> - <string name="face_acquired_too_similar">Too similar, please change your pose.</string> + <string name="face_acquired_too_similar">Change the position of your head slightly</string> <!-- Message shown during acqusition when the user's face is turned too far left or right [CHAR LIMIT=50] --> - <string name="face_acquired_pan_too_extreme">Turn your head a little less.</string> + <string name="face_acquired_pan_too_extreme">Look more directly at your phone</string> <!-- Message shown during acqusition when the user's face is tilted too high or too low [CHAR LIMIT=50] --> - <string name="face_acquired_tilt_too_extreme">Tilt your head a little less.</string> + <string name="face_acquired_tilt_too_extreme">Look more directly at your phone</string> <!-- Message shown during acquisiton when the user's face is tilted too far left or right [CHAR LIMIT=50] --> - <string name="face_acquired_roll_too_extreme">Turn your head a little less.</string> + <string name="face_acquired_roll_too_extreme">Look more directly at your phone</string> <!-- Message shown during acquisition when the user's face is obscured [CHAR LIMIT=50] --> <string name="face_acquired_obscured">Remove anything hiding your face.</string> <!-- Message shown during acquisition when the sensor is dirty [CHAR LIMIT=100] --> <string name="face_acquired_sensor_dirty">Clean the top of your screen, including the black bar</string> + <!-- Message shown during acquisition when dark glasses were detected [CHAR LIMIT=75] --> + <string name="face_acquired_dark_glasses_detected">Your face must be fully visible</string> + <!-- Message shown during acquisition when a mouth covering was detected [CHAR LIMIT=75] --> + <string name="face_acquired_mouth_covering_detected">Your face must be fully visible</string> + + <!-- Message shown during face acquisition when the sensor needs to be recalibrated [CHAR LIMIT=75] --> + <string name="face_acquired_recalibrate_alt">Can\u2019t create your face model. Try again.</string> + <!-- Message shown during acquisition when dark glasses were detected [CHAR LIMIT=100] --> + <string name="face_acquired_dark_glasses_detected_alt">Dark glasses detected. Your face must be fully visible.</string> + <!-- Message shown during acquisition when a mouth covering was detected [CHAR LIMIT=100] --> + <string name="face_acquired_mouth_covering_detected_alt">Face covering detected. Your face must be fully visible.</string> + <!-- Array containing custom messages shown during face acquisition from vendor. Vendor is expected to add and translate these strings --> <string-array name="face_acquired_vendor"> </string-array> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index fbb2e4afcda4..5dc8ac0ee4d9 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2657,6 +2657,11 @@ <java-symbol type="string" name="face_acquired_roll_too_extreme" /> <java-symbol type="string" name="face_acquired_obscured" /> <java-symbol type="string" name="face_acquired_sensor_dirty" /> + <java-symbol type="string" name="face_acquired_dark_glasses_detected" /> + <java-symbol type="string" name="face_acquired_mouth_covering_detected" /> + <java-symbol type="string" name="face_acquired_recalibrate_alt" /> + <java-symbol type="string" name="face_acquired_dark_glasses_detected_alt" /> + <java-symbol type="string" name="face_acquired_mouth_covering_detected_alt" /> <java-symbol type="array" name="face_acquired_vendor" /> <java-symbol type="string" name="face_name_template" /> <java-symbol type="string" name="face_app_setting_name" /> @@ -4798,4 +4803,6 @@ <java-symbol type="id" name="language_picker_header" /> <java-symbol type="dimen" name="status_bar_height_default" /> + + <java-symbol type="bool" name="system_server_plays_face_haptics" /> </resources> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java index c94455d9151a..bae23575297f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java @@ -211,24 +211,24 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange /** Applies new configuration, returns {@code false} if there's no effect to the layout. */ public boolean updateConfiguration(Configuration configuration) { - // Always update configuration after orientation changed to make sure to render divider bar - // with proper resources that matching screen orientation. - final int orientation = configuration.orientation; - if (mOrientation != orientation) { - mContext = mContext.createConfigurationContext(configuration); - mSplitWindowManager.setConfiguration(configuration); - mOrientation = orientation; - } - // Update the split bounds when necessary. Besides root bounds changed, split bounds need to // be updated when the rotation changed to cover the case that users rotated the screen 180 // degrees. + // Make sure to render the divider bar with proper resources that matching the screen + // orientation. final int rotation = configuration.windowConfiguration.getRotation(); final Rect rootBounds = configuration.windowConfiguration.getBounds(); - if (mRotation == rotation && mRootBounds.equals(rootBounds)) { + final int orientation = configuration.orientation; + + if (mOrientation == orientation + && mRotation == rotation + && mRootBounds.equals(rootBounds)) { return false; } + mContext = mContext.createConfigurationContext(configuration); + mSplitWindowManager.setConfiguration(configuration); + mOrientation = orientation; mTempRect.set(mRootBounds); mRootBounds.set(rootBounds); mRotation = rotation; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java index dad261ad9580..4b1e5f8c0d7c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java @@ -542,24 +542,44 @@ public class PipController implements PipTransitionController.PipTransitionCallb mMenuController.attachPipMenuView(); // Calculate the snap fraction of the current stack along the old movement bounds final PipSnapAlgorithm pipSnapAlgorithm = mPipBoundsAlgorithm.getSnapAlgorithm(); - final Rect postChangeStackBounds = new Rect(mPipBoundsState.getBounds()); - final float snapFraction = pipSnapAlgorithm.getSnapFraction(postChangeStackBounds, - mPipBoundsAlgorithm.getMovementBounds(postChangeStackBounds), + final Rect postChangeBounds = new Rect(mPipBoundsState.getBounds()); + final float snapFraction = pipSnapAlgorithm.getSnapFraction(postChangeBounds, + mPipBoundsAlgorithm.getMovementBounds(postChangeBounds), mPipBoundsState.getStashedState()); + // Scale PiP on density dpi change, so it appears to be the same size physically. + final boolean densityDpiChanged = mPipBoundsState.getDisplayLayout().densityDpi() != 0 + && (mPipBoundsState.getDisplayLayout().densityDpi() != layout.densityDpi()); + if (densityDpiChanged) { + final float scale = (float) layout.densityDpi() + / mPipBoundsState.getDisplayLayout().densityDpi(); + postChangeBounds.set(0, 0, + (int) (postChangeBounds.width() * scale), + (int) (postChangeBounds.height() * scale)); + } + updateDisplayLayout.run(); - // Calculate the stack bounds in the new orientation based on same fraction along the + // Calculate the PiP bounds in the new orientation based on same fraction along the // rotated movement bounds. final Rect postChangeMovementBounds = mPipBoundsAlgorithm.getMovementBounds( - postChangeStackBounds, false /* adjustForIme */); - pipSnapAlgorithm.applySnapFraction(postChangeStackBounds, postChangeMovementBounds, + postChangeBounds, false /* adjustForIme */); + pipSnapAlgorithm.applySnapFraction(postChangeBounds, postChangeMovementBounds, snapFraction, mPipBoundsState.getStashedState(), mPipBoundsState.getStashOffset(), mPipBoundsState.getDisplayBounds(), mPipBoundsState.getDisplayLayout().stableInsets()); - mTouchHandler.getMotionHelper().movePip(postChangeStackBounds); + if (densityDpiChanged) { + // Using PipMotionHelper#movePip directly here may cause race condition since + // the app content in PiP mode may or may not be updated for the new density dpi. + final int duration = mContext.getResources().getInteger( + R.integer.config_pipEnterAnimationDuration); + mPipTaskOrganizer.scheduleAnimateResizePip( + postChangeBounds, duration, null /* updateBoundsCallback */); + } else { + mTouchHandler.getMotionHelper().movePip(postChangeBounds); + } } else { updateDisplayLayout.run(); } diff --git a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java index 190e1cc083bd..fba4249260ef 100644 --- a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java +++ b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java @@ -142,6 +142,14 @@ public class GpsNetInitiatedHandler { public int textEncoding; } + /** Callbacks for Emergency call events. */ + public interface EmergencyCallCallback { + /** Callback invoked when an emergency call starts */ + void onEmergencyCallStart(int subId); + /** Callback invoked when an emergency call ends */ + void onEmergencyCallEnd(); + } + private class EmergencyCallListener extends TelephonyCallback implements TelephonyCallback.OutgoingEmergencyCallListener, TelephonyCallback.CallStateListener { @@ -152,6 +160,7 @@ public class GpsNetInitiatedHandler { int subscriptionId) { mIsInEmergencyCall = true; if (DEBUG) Log.d(TAG, "onOutgoingEmergencyCall(): inEmergency = " + getInEmergency()); + mEmergencyCallCallback.onEmergencyCallStart(subscriptionId); } @Override @@ -163,6 +172,7 @@ public class GpsNetInitiatedHandler { if (mIsInEmergencyCall) { mCallEndElapsedRealtimeMillis = SystemClock.elapsedRealtime(); mIsInEmergencyCall = false; + mEmergencyCallCallback.onEmergencyCallEnd(); } } } @@ -180,8 +190,11 @@ public class GpsNetInitiatedHandler { */ private Notification.Builder mNiNotificationBuilder; + private final EmergencyCallCallback mEmergencyCallCallback; + public GpsNetInitiatedHandler(Context context, INetInitiatedListener netInitiatedListener, + EmergencyCallCallback emergencyCallCallback, boolean isSuplEsEnabled) { mContext = context; @@ -190,6 +203,7 @@ public class GpsNetInitiatedHandler { } else { mNetInitiatedListener = netInitiatedListener; } + mEmergencyCallCallback = emergencyCallCallback; setSuplEsEnabled(isSuplEsEnabled); mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CsipDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CsipDeviceManager.java index 89e10c4b5e11..fc70ba40fb47 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CsipDeviceManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CsipDeviceManager.java @@ -20,15 +20,19 @@ import android.bluetooth.BluetoothCsipSetCoordinator; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothUuid; +import android.os.Build; import android.os.ParcelUuid; import android.util.Log; +import androidx.annotation.ChecksSdkIntAtLeast; + import com.android.internal.annotations.VisibleForTesting; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; /** * CsipDeviceManager manages the set of remote CSIP Bluetooth devices. @@ -126,32 +130,84 @@ public class CsipDeviceManager { } } + @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.TIRAMISU) + private static boolean isAtLeastT() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU; + } + // Group devices by groupId @VisibleForTesting void onGroupIdChanged(int groupId) { - int firstMatchedIndex = -1; - CachedBluetoothDevice mainDevice = null; + if (!isValidGroupId(groupId)) { + log("onGroupIdChanged: groupId is invalid"); + return; + } + log("onGroupIdChanged: mCachedDevices list =" + mCachedDevices.toString()); + final LocalBluetoothProfileManager profileManager = mBtManager.getProfileManager(); + final CachedBluetoothDeviceManager deviceManager = mBtManager.getCachedDeviceManager(); + final LeAudioProfile leAudioProfile = profileManager.getLeAudioProfile(); + final BluetoothDevice mainBluetoothDevice = (leAudioProfile != null && isAtLeastT()) ? + leAudioProfile.getConnectedGroupLeadDevice(groupId) : null; + CachedBluetoothDevice newMainDevice = + mainBluetoothDevice != null ? deviceManager.findDevice(mainBluetoothDevice) : null; + if (newMainDevice != null) { + final CachedBluetoothDevice finalNewMainDevice = newMainDevice; + final List<CachedBluetoothDevice> memberDevices = mCachedDevices.stream() + .filter(cachedDevice -> !cachedDevice.equals(finalNewMainDevice) + && cachedDevice.getGroupId() == groupId) + .collect(Collectors.toList()); + if (memberDevices == null || memberDevices.isEmpty()) { + log("onGroupIdChanged: There is no member device in list."); + return; + } + log("onGroupIdChanged: removed from UI device =" + memberDevices + + ", with groupId=" + groupId + " mainDevice= " + newMainDevice); + for (CachedBluetoothDevice memberDeviceItem : memberDevices) { + Set<CachedBluetoothDevice> memberSet = memberDeviceItem.getMemberDevice(); + if (!memberSet.isEmpty()) { + log("onGroupIdChanged: Transfer the member list into new main device."); + for (CachedBluetoothDevice memberListItem : memberSet) { + if (!memberListItem.equals(newMainDevice)) { + newMainDevice.addMemberDevice(memberListItem); + } + } + memberSet.clear(); + } - for (int i = mCachedDevices.size() - 1; i >= 0; i--) { - final CachedBluetoothDevice cachedDevice = mCachedDevices.get(i); - if (cachedDevice.getGroupId() != groupId) { - continue; + newMainDevice.addMemberDevice(memberDeviceItem); + mCachedDevices.remove(memberDeviceItem); + mBtManager.getEventManager().dispatchDeviceRemoved(memberDeviceItem); } - if (firstMatchedIndex == -1) { - // Found the first one - firstMatchedIndex = i; - mainDevice = cachedDevice; - continue; + if (!mCachedDevices.contains(newMainDevice)) { + mCachedDevices.add(newMainDevice); + mBtManager.getEventManager().dispatchDeviceAdded(newMainDevice); } + } else { + log("onGroupIdChanged: There is no main device from the LE profile."); + int firstMatchedIndex = -1; - log("onGroupIdChanged: removed from UI device =" + cachedDevice - + ", with groupId=" + groupId + " firstMatchedIndex=" + firstMatchedIndex); + for (int i = mCachedDevices.size() - 1; i >= 0; i--) { + final CachedBluetoothDevice cachedDevice = mCachedDevices.get(i); + if (cachedDevice.getGroupId() != groupId) { + continue; + } + + if (firstMatchedIndex == -1) { + // Found the first one + firstMatchedIndex = i; + newMainDevice = cachedDevice; + continue; + } + + log("onGroupIdChanged: removed from UI device =" + cachedDevice + + ", with groupId=" + groupId + " firstMatchedIndex=" + firstMatchedIndex); - mainDevice.addMemberDevice(cachedDevice); - mCachedDevices.remove(i); - mBtManager.getEventManager().dispatchDeviceRemoved(cachedDevice); - break; + newMainDevice.addMemberDevice(cachedDevice); + mCachedDevices.remove(i); + mBtManager.getEventManager().dispatchDeviceRemoved(cachedDevice); + break; + } } } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LeAudioProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LeAudioProfile.java index 19df1e9c0730..0f57d8785de9 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LeAudioProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LeAudioProfile.java @@ -21,6 +21,7 @@ import static android.bluetooth.BluetoothAdapter.ACTIVE_DEVICE_ALL; import static android.bluetooth.BluetoothProfile.CONNECTION_POLICY_ALLOWED; import static android.bluetooth.BluetoothProfile.CONNECTION_POLICY_FORBIDDEN; +import android.annotation.Nullable; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothCodecConfig; @@ -183,6 +184,37 @@ public class LeAudioProfile implements LocalBluetoothProfile { return mBluetoothAdapter.getActiveDevices(BluetoothProfile.LE_AUDIO); } + /** + * Get Lead device for the group. + * + * Lead device is the device that can be used as an active device in the system. + * Active devices points to the Audio Device for the Le Audio group. + * This method returns the Lead devices for the connected LE Audio + * group and this device should be used in the setActiveDevice() method by other parts + * of the system, which wants to set to active a particular Le Audio group. + * + * Note: getActiveDevice() returns the Lead device for the currently active LE Audio group. + * Note: When Lead device gets disconnected while Le Audio group is active and has more devices + * in the group, then Lead device will not change. If Lead device gets disconnected, for the + * Le Audio group which is not active, a new Lead device will be chosen + * + * @param groupId The group id. + * @return group lead device. + * + * @hide + */ + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + public @Nullable BluetoothDevice getConnectedGroupLeadDevice(int groupId) { + if (DEBUG) { + Log.d(TAG,"getConnectedGroupLeadDevice"); + } + if (mService == null) { + Log.e(TAG,"No service."); + return null; + } + return mService.getConnectedGroupLeadDevice(groupId); + } + @Override public boolean isEnabled(BluetoothDevice device) { if (mService == null || device == null) { diff --git a/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java b/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java index 8b34cf3d624f..44a37f4ccaca 100644 --- a/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java @@ -25,6 +25,7 @@ import android.util.DisplayMetrics; import android.util.Log; import android.util.MathUtils; import android.view.Display; +import android.view.DisplayInfo; import android.view.IWindowManager; import android.view.WindowManagerGlobal; @@ -87,14 +88,14 @@ public class DisplayDensityUtils { } final Resources res = context.getResources(); - final DisplayMetrics metrics = new DisplayMetrics(); - context.getDisplayNoVerify().getRealMetrics(metrics); + DisplayInfo info = new DisplayInfo(); + context.getDisplayNoVerify().getDisplayInfo(info); - final int currentDensity = metrics.densityDpi; + final int currentDensity = info.logicalDensityDpi; int currentDensityIndex = -1; // Compute number of "larger" and "smaller" scales for this display. - final int minDimensionPx = Math.min(metrics.widthPixels, metrics.heightPixels); + final int minDimensionPx = Math.min(info.logicalWidth, info.logicalHeight); final int maxDensity = DisplayMetrics.DENSITY_MEDIUM * minDimensionPx / MIN_DIMENSION_DP; final float maxScaleDimen = context.getResources().getFraction( R.fraction.display_density_max_scale, 1, 1); diff --git a/packages/SystemUI/TEST_MAPPING b/packages/SystemUI/TEST_MAPPING index 3bd6d51eecc6..edb5ee30524f 100644 --- a/packages/SystemUI/TEST_MAPPING +++ b/packages/SystemUI/TEST_MAPPING @@ -91,7 +91,7 @@ // // If you don't use @Staging or @Postsubmit, your new test will immediately // block presubmit, which is probably not what you want! - "platinum-postsubmit": [ + "sysui-platinum-postsubmit": [ { "name": "PlatformScenarioTests", "options": [ @@ -110,7 +110,7 @@ ] } ], - "staged-platinum-postsubmit": [ + "sysui-staged-platinum-postsubmit": [ { "name": "PlatformScenarioTests", "options": [ diff --git a/packages/SystemUI/animation/res/values/ids.xml b/packages/SystemUI/animation/res/values/ids.xml index 03ca462beb76..f7150ab548dd 100644 --- a/packages/SystemUI/animation/res/values/ids.xml +++ b/packages/SystemUI/animation/res/values/ids.xml @@ -21,6 +21,7 @@ <!-- ViewBoundsAnimator --> <item type="id" name="tag_animator"/> + <item type="id" name="tag_alpha_animator"/> <item type="id" name="tag_layout_listener"/> <item type="id" name="tag_override_bottom"/> <item type="id" name="tag_override_left"/> diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt index bb6eb78aac65..323db8526470 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt @@ -494,9 +494,10 @@ class ActivityLaunchAnimator( } private fun applyStateToWindow(window: RemoteAnimationTarget, state: LaunchAnimator.State) { - if (transactionApplierView.viewRootImpl == null) { - // If the view root we synchronize with was detached, don't apply any transaction - // (as [SyncRtSurfaceTransactionApplier.scheduleApply] would otherwise throw). + if (transactionApplierView.viewRootImpl == null || !window.leash.isValid) { + // Don't apply any transaction if the view root we synchronize with was detached or + // if the SurfaceControl associated with [window] is not valid, as + // [SyncRtSurfaceTransactionApplier.scheduleApply] would otherwise throw. return } @@ -557,9 +558,10 @@ class ActivityLaunchAnimator( state: LaunchAnimator.State, linearProgress: Float ) { - if (transactionApplierView.viewRootImpl == null) { - // If the view root we synchronize with was detached, don't apply any transaction - // (as [SyncRtSurfaceTransactionApplier.scheduleApply] would otherwise throw). + if (transactionApplierView.viewRootImpl == null || !navigationBar.leash.isValid) { + // Don't apply any transaction if the view root we synchronize with was detached or + // if the SurfaceControl associated with [navigationBar] is not valid, as + // [SyncRtSurfaceTransactionApplier.scheduleApply] would otherwise throw. return } diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ViewHierarchyAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ViewHierarchyAnimator.kt index 093589f8c636..4c3cd3c2b441 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/ViewHierarchyAnimator.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ViewHierarchyAnimator.kt @@ -39,6 +39,7 @@ class ViewHierarchyAnimator { private val DEFAULT_INTERPOLATOR = Interpolators.STANDARD private val DEFAULT_ADDITION_INTERPOLATOR = Interpolators.STANDARD_DECELERATE private val DEFAULT_REMOVAL_INTERPOLATOR = Interpolators.STANDARD_ACCELERATE + private val DEFAULT_FADE_IN_INTERPOLATOR = Interpolators.ALPHA_IN /** The properties used to animate the view bounds. */ private val PROPERTIES = mapOf( @@ -162,6 +163,10 @@ class ViewHierarchyAnimator { * animate an already visible view, see [animate] and [animateNextUpdate]. * * Then animator unregisters itself once the first addition animation is complete. + * + * @param includeFadeIn true if the animator should also fade in the view and child views. + * @param fadeInInterpolator the interpolator to use when fading in the view. Unused if + * [includeFadeIn] is false. */ @JvmOverloads fun animateAddition( @@ -169,7 +174,9 @@ class ViewHierarchyAnimator { origin: Hotspot = Hotspot.CENTER, interpolator: Interpolator = DEFAULT_ADDITION_INTERPOLATOR, duration: Long = DEFAULT_DURATION, - includeMargins: Boolean = false + includeMargins: Boolean = false, + includeFadeIn: Boolean = false, + fadeInInterpolator: Interpolator = DEFAULT_FADE_IN_INTERPOLATOR ): Boolean { if (isVisible( rootView.visibility, @@ -186,6 +193,42 @@ class ViewHierarchyAnimator { origin, interpolator, duration, ignorePreviousValues = !includeMargins ) addListener(rootView, listener, recursive = true) + + if (!includeFadeIn) { + return true + } + + if (rootView is ViewGroup) { + // First, fade in the container view + val containerDuration = duration / 6 + createAndStartFadeInAnimator( + rootView, containerDuration, startDelay = 0, interpolator = fadeInInterpolator + ) + + // Then, fade in the child views + val childDuration = duration / 3 + for (i in 0 until rootView.childCount) { + val view = rootView.getChildAt(i) + createAndStartFadeInAnimator( + view, + childDuration, + // Wait until the container fades in before fading in the children + startDelay = containerDuration, + interpolator = fadeInInterpolator + ) + } + // For now, we don't recursively fade in additional sub views (e.g. grandchild + // views) since it hasn't been necessary, but we could add that functionality. + } else { + // Fade in the view during the first half of the addition + createAndStartFadeInAnimator( + rootView, + duration / 2, + startDelay = 0, + interpolator = fadeInInterpolator + ) + } + return true } @@ -834,6 +877,27 @@ class ViewHierarchyAnimator { view.setTag(R.id.tag_animator, animator) animator.start() } + + private fun createAndStartFadeInAnimator( + view: View, + duration: Long, + startDelay: Long, + interpolator: Interpolator + ) { + val animator = ObjectAnimator.ofFloat(view, "alpha", 1f) + animator.startDelay = startDelay + animator.duration = duration + animator.interpolator = interpolator + animator.addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + view.setTag(R.id.tag_alpha_animator, null /* tag */) + } + }) + + (view.getTag(R.id.tag_alpha_animator) as? ObjectAnimator)?.cancel() + view.setTag(R.id.tag_alpha_animator, animator) + animator.start() + } } /** An enum used to determine the origin of addition animations. */ diff --git a/packages/SystemUI/res-keyguard/values-af/strings.xml b/packages/SystemUI/res-keyguard/values-af/strings.xml index f2ad66dd7afa..5184c1cb02f5 100644 --- a/packages/SystemUI/res-keyguard/values-af/strings.xml +++ b/packages/SystemUI/res-keyguard/values-af/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Toestel is deur administrateur gesluit"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Toestel is handmatig gesluit"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nie herken nie"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Skakel "<b>"kameratoegang"</b>" in Instellings > Privaatheid aan om Gesigslot te gebruik"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Skakel kameratoegang aan om Gesigslot te gebruik"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Voer SIM-PIN in. Jy het <xliff:g id="NUMBER_1">%d</xliff:g> pogings oor.</item> <item quantity="one">Voer SIM-PIN in. Jy het <xliff:g id="NUMBER_0">%d</xliff:g> poging oor voordat jy jou diensverskaffer moet kontak om jou toestel te ontsluit.</item> diff --git a/packages/SystemUI/res-keyguard/values-am/strings.xml b/packages/SystemUI/res-keyguard/values-am/strings.xml index 7f4f6fd3b7ad..11a2be59d9b8 100644 --- a/packages/SystemUI/res-keyguard/values-am/strings.xml +++ b/packages/SystemUI/res-keyguard/values-am/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"መሣሪያ በአስተዳዳሪ ተቆልፏል"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"መሣሪያ በተጠቃሚው ራሱ ተቆልፏል"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"አልታወቀም"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"በመልክ መክፈትን ለመጠቀም "<b>"የካሜራ መዳረሻ"</b>"ን በቅንብሮች እና ግላዊነት ውስጥ ያብሩ"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"በመልክ መክፈትን ለመጠቀም በቅንብሮች ውስጥ የካሜራ መዳረሻን ያብሩ"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">የሲም ፒን ያስገቡ። <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀረዎታል።</item> <item quantity="other">የሲም ፒን ያስገቡ። <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀረዎታል።</item> diff --git a/packages/SystemUI/res-keyguard/values-ar/strings.xml b/packages/SystemUI/res-keyguard/values-ar/strings.xml index f0bbf516eaa1..5e3bc324568e 100644 --- a/packages/SystemUI/res-keyguard/values-ar/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ar/strings.xml @@ -98,7 +98,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"اختار المشرف قفل الجهاز"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"تم حظر الجهاز يدويًا"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"لم يتم التعرّف عليه."</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"لاستخدام ميزة \"فتح الجهاز بالتعرف على الوجه\"، عليك منح إذن "<b>"الوصول إلى الكاميرا"</b>" في الإعدادات > الخصوصية."</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"يجب منح الكاميرا إذن الوصول في \"الإعدادات\"."</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="zero">أدخل رقم التعريف الشخصي لشريحة SIM. تتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة.</item> <item quantity="two">أدخل رقم التعريف الشخصي لشريحة SIM. تتبقى لديك محاولتان (<xliff:g id="NUMBER_1">%d</xliff:g>).</item> diff --git a/packages/SystemUI/res-keyguard/values-as/strings.xml b/packages/SystemUI/res-keyguard/values-as/strings.xml index 186f47a461ac..d60c564adcb4 100644 --- a/packages/SystemUI/res-keyguard/values-as/strings.xml +++ b/packages/SystemUI/res-keyguard/values-as/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"প্ৰশাসকে ডিভাইচ লক কৰি ৰাখিছে"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ডিভাইচটো মেনুৱেলভাৱে লক কৰা হৈছিল"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"চিনাক্ত কৰিব পৰা নাই"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"ফেচ আনলক সুবিধাটো ব্যৱহাৰ কৰিবলৈ ছেটিং > গোপনীয়তাত "<b>"কেমেৰাৰ এক্সেছ"</b>" অন কৰক"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ফেচ আনলক ব্যৱহাৰ কৰিবলৈ ছেটিঙত কেমেৰাৰ এক্সেছ অন কৰক"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">ছিমৰ পিন দিয়ক। আপুনি আৰু <xliff:g id="NUMBER_1">%d</xliff:g>বাৰ প্ৰয়াস কৰিব পাৰে।</item> <item quantity="other">ছিমৰ পিন দিয়ক। আপুনি আৰু <xliff:g id="NUMBER_1">%d</xliff:g>বাৰ প্ৰয়াস কৰিব পাৰে।</item> diff --git a/packages/SystemUI/res-keyguard/values-az/strings.xml b/packages/SystemUI/res-keyguard/values-az/strings.xml index 71fd47ba0026..fe35bbc34bfa 100644 --- a/packages/SystemUI/res-keyguard/values-az/strings.xml +++ b/packages/SystemUI/res-keyguard/values-az/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Cihaz admin tərəfindən kilidlənib"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Cihaz əl ilə kilidləndi"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tanınmır"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Üz ilə Kiliddən Açma funksiyasını istifadə etmək üçün Ayarlar > Məxfilik bölməsində "<b>"Kameraya girişi"</b>" aktiv edin"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Üz ilə Kiliddən Açmanı istifadə etmək üçün Ayarlarda kameraya girişi aktiv edin"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM PIN-ni daxil edin. <xliff:g id="NUMBER_1">%d</xliff:g> cəhdiniz qalır.</item> <item quantity="one">SIM PIN-ni daxil edin. Cihazınızı kiliddən çıxarmaq üçün operatorunuzla əlaqə saxlamadan öncə <xliff:g id="NUMBER_0">%d</xliff:g> cəhdiniz qalır.</item> diff --git a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml index c04a766c31c2..5e83a153ff76 100644 --- a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml @@ -92,7 +92,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administrator je zaključao uređaj"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Uređaj je ručno zaključan"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nije prepoznat"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Da biste koristili otključavanje licem, uključite "<b>"pristup kameri"</b>" u odeljku Podešavanja > Privatnost"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Otključavanje licem traži pristup kameri u Podešavanjima"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item> <item quantity="few">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item> diff --git a/packages/SystemUI/res-keyguard/values-be/strings.xml b/packages/SystemUI/res-keyguard/values-be/strings.xml index eda5497fe44a..0e6681ce8b3a 100644 --- a/packages/SystemUI/res-keyguard/values-be/strings.xml +++ b/packages/SystemUI/res-keyguard/values-be/strings.xml @@ -94,7 +94,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Прылада заблакіравана адміністратарам"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Прылада была заблакіравана ўручную"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не распазнана"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Каб выкарыстоўваць распазнаванне твару, уключыце "<b>"доступ да камеры"</b>" праз раздзел \"Налады > Прыватнасць\""</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Для распазнавання твару ўключыце доступ да камеры"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Увядзіце PIN-код SIM-карты. У вас засталася <xliff:g id="NUMBER_1">%d</xliff:g> спроба.</item> <item quantity="few">Увядзіце PIN-код SIM-карты. У вас засталося <xliff:g id="NUMBER_1">%d</xliff:g> спробы.</item> diff --git a/packages/SystemUI/res-keyguard/values-bg/strings.xml b/packages/SystemUI/res-keyguard/values-bg/strings.xml index b108a326e4d2..6983ceba9b6d 100644 --- a/packages/SystemUI/res-keyguard/values-bg/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bg/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Устройството е заключено от администратора"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Устройството бе заключено ръчно"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не е разпознато"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"За да използвате функцията „Отключване с лице“, включете "<b>"достъпа до камерата"</b>" от „Настройки > Поверителност“"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"За да ползвате „Отключване с лице“, вкл. достъпа до камерата от настройките"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Въведете ПИН кода за SIM картата – остават ви <xliff:g id="NUMBER_1">%d</xliff:g> опита.</item> <item quantity="one">Въведете ПИН кода за SIM картата – остава ви <xliff:g id="NUMBER_0">%d</xliff:g> опит, преди да се наложи да се свържете с оператора си, за да отключите устройството.</item> diff --git a/packages/SystemUI/res-keyguard/values-bn/strings.xml b/packages/SystemUI/res-keyguard/values-bn/strings.xml index f96db50eefde..bbc025fe08bb 100644 --- a/packages/SystemUI/res-keyguard/values-bn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bn/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"প্রশাসক ডিভাইসটি লক করেছেন"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ডিভাইসটিকে ম্যানুয়ালি লক করা হয়েছে"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"শনাক্ত করা যায়নি"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"\'ফেস আনলক\' ফিচার ব্যবহার করতে \'সেটিংস ও গোপনীয়তা\' বিকল্পে গিয়ে "<b>"ক্যামেরায় অ্যাক্সেস দিন"</b></string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"\'ফেস আনলক\' ফিচার ব্যবহার করতে, \'সেটিংস\' থেকে ক্যামেরার অ্যাক্সেস চালু করুন"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">সিমের পিন লিখুন। আপনি আর <xliff:g id="NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারবেন।</item> <item quantity="other">সিমের পিন লিখুন। আপনি আর <xliff:g id="NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারবেন।</item> diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml index 4a471579c9b0..e0bec8463ed5 100644 --- a/packages/SystemUI/res-keyguard/values-bs/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml @@ -92,7 +92,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Uređaj je zaključao administrator"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Uređaj je ručno zaključan"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nije prepoznato"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Da koristite otključavanje licem, uključite "<b>"Pristup kameri"</b>" u meniju Postavke > Privatnost"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Za otključavanje licem uključite pristup kameri"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item> <item quantity="few">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item> diff --git a/packages/SystemUI/res-keyguard/values-ca/strings.xml b/packages/SystemUI/res-keyguard/values-ca/strings.xml index 9cc855ab3dee..1e30e788ed3a 100644 --- a/packages/SystemUI/res-keyguard/values-ca/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ca/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"L\'administrador ha bloquejat el dispositiu"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"El dispositiu s\'ha bloquejat manualment"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"No s\'ha reconegut"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Per utilitzar Desbloqueig facial, activa "<b>"Accés a la càmera"</b>" a Configuració > Privadesa"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Desbloqueig facial necessita accés a la càmera"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Introdueix el PIN de la SIM. Et queden <xliff:g id="NUMBER_1">%d</xliff:g> intents.</item> <item quantity="one">Introdueix el PIN de la SIM. Et queda <xliff:g id="NUMBER_0">%d</xliff:g> intent; si no l\'encertes, contacta amb l\'operador de telefonia mòbil per desbloquejar el dispositiu.</item> diff --git a/packages/SystemUI/res-keyguard/values-cs/strings.xml b/packages/SystemUI/res-keyguard/values-cs/strings.xml index 606bff513d77..3c37bba3fe81 100644 --- a/packages/SystemUI/res-keyguard/values-cs/strings.xml +++ b/packages/SystemUI/res-keyguard/values-cs/strings.xml @@ -94,7 +94,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Zařízení je uzamknuto administrátorem"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Zařízení bylo ručně uzamčeno"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nerozpoznáno"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Pokud chcete používat odemknutí obličejem, v Nastavení > Soukromí zapnetě "<b>"přístup k fotoaparátu"</b></string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"V Nastavení zapněte přístup k fotoaparátu"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="few">Zadejte PIN SIM karty. Zbývají <xliff:g id="NUMBER_1">%d</xliff:g> pokusy.</item> <item quantity="many">Zadejte PIN SIM karty. Zbývá <xliff:g id="NUMBER_1">%d</xliff:g> pokusu.</item> diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml index 8f7b8d0c4758..0774c520cb62 100644 --- a/packages/SystemUI/res-keyguard/values-da/strings.xml +++ b/packages/SystemUI/res-keyguard/values-da/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Enheden er blevet låst af administratoren"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Enheden blev låst manuelt"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ikke genkendt"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Hvis du vil bruge ansigtslåsen, skal du aktivere "<b>"Kameraadgang"</b>" under Indstillinger > Privatliv"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Aktivér kameraadgang i Indstillinger for at bruge ansigtslås"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Angiv pinkoden til SIM-kortet. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage.</item> <item quantity="other">Angiv pinkoden til SIM-kortet. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage.</item> diff --git a/packages/SystemUI/res-keyguard/values-de/strings.xml b/packages/SystemUI/res-keyguard/values-de/strings.xml index 6391ed001a05..c46c08f0e7e9 100644 --- a/packages/SystemUI/res-keyguard/values-de/strings.xml +++ b/packages/SystemUI/res-keyguard/values-de/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Gerät vom Administrator gesperrt"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Gerät manuell gesperrt"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nicht erkannt"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Wenn du die Entsperrung per Gesichtserkennung verwenden möchtest, aktiviere in den Einstellungen unter „Datenschutz“ die Option "<b>"Kamerazugriff"</b></string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Die Gesichtsentsperrung benötigt Kamerazugriff"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Gib die PIN für die SIM-Karte ein. Du hast noch <xliff:g id="NUMBER_1">%d</xliff:g> Versuche.</item> <item quantity="one">Gib die PIN für die SIM-Karte ein. Du hast noch <xliff:g id="NUMBER_0">%d</xliff:g> Versuch, bevor das Gerät nur noch vom Mobilfunkanbieter entsperrt werden kann.</item> diff --git a/packages/SystemUI/res-keyguard/values-el/strings.xml b/packages/SystemUI/res-keyguard/values-el/strings.xml index a5bbb9a07e29..73afafa7e0cb 100644 --- a/packages/SystemUI/res-keyguard/values-el/strings.xml +++ b/packages/SystemUI/res-keyguard/values-el/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Η συσκευή κλειδώθηκε από τον διαχειριστή"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Η συσκευή κλειδώθηκε με μη αυτόματο τρόπο"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Δεν αναγνωρίστηκε"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Για να χρησιμοποιήσετε τη λειτουργία Ξεκλείδωμα με το πρόσωπο, ενεργοποιήστε την επιλογή "<b>"Πρόσβαση στην κάμερα"</b>" από το μενού Ρυθμίσεις > Απόρρητο"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Ενεργοπ. πρόσβ. κάμ. στις Ρυθμ. για Ξεκλείδ. με το πρόσωπο."</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Εισαγάγετε τον αριθμό PIN της κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες.</item> <item quantity="one">Εισαγάγετε τον αριθμό PIN της κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας, για να ξεκλειδώσετε τη συσκευή.</item> diff --git a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml index abfe5be358e4..0d08c428307c 100644 --- a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Device locked by admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"To use Face Unlock, turn on "<b>"Camera access"</b>" in Settings > Privacy"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"To use Face Unlock, turn on camera access in Settings"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item> <item quantity="one">Enter SIM PIN. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your operator to unlock your device.</item> diff --git a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml index d96d2940c5bb..3356ec98ad2c 100644 --- a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Device locked by admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"To use Face Unlock, turn on "<b>"Camera access"</b>" in Settings > Privacy"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"To use Face Unlock, turn on camera access in Settings"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item> <item quantity="one">Enter SIM PIN. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your carrier to unlock your device.</item> diff --git a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml index abfe5be358e4..0d08c428307c 100644 --- a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Device locked by admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"To use Face Unlock, turn on "<b>"Camera access"</b>" in Settings > Privacy"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"To use Face Unlock, turn on camera access in Settings"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item> <item quantity="one">Enter SIM PIN. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your operator to unlock your device.</item> diff --git a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml index abfe5be358e4..0d08c428307c 100644 --- a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Device locked by admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"To use Face Unlock, turn on "<b>"Camera access"</b>" in Settings > Privacy"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"To use Face Unlock, turn on camera access in Settings"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item> <item quantity="one">Enter SIM PIN. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your operator to unlock your device.</item> diff --git a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml index 804b6ae3e26f..3c3194283be4 100644 --- a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml +++ b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Device locked by admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognized"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"To use Face Unlock, turn on "<b>"Camera access"</b>" in Settings > Privacy"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"To use Face Unlock, turn on camera access in Settings"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item> <item quantity="one">Enter SIM PIN. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your carrier to unlock your device.</item> diff --git a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml index d9adc7c980da..708e6330ed53 100644 --- a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml +++ b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispositivo bloqueado por el administrador"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"El dispositivo se bloqueó de forma manual"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"No se reconoció"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Para usar Desbloqueo facial, activa el "<b>"Acceso a la cámara"</b>" en Configuración y privacidad"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Activa acceso a cámara en Config. y usa Desb. facial"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Ingresa el PIN de la SIM. Quedan <xliff:g id="NUMBER_1">%d</xliff:g> intentos más.</item> <item quantity="one">Ingresa el PIN de la SIM. Queda <xliff:g id="NUMBER_0">%d</xliff:g> intento antes de que debas comunicarte con tu proveedor para desbloquear el dispositivo.</item> diff --git a/packages/SystemUI/res-keyguard/values-es/strings.xml b/packages/SystemUI/res-keyguard/values-es/strings.xml index 84016da04a75..b498c0ea8c8f 100644 --- a/packages/SystemUI/res-keyguard/values-es/strings.xml +++ b/packages/SystemUI/res-keyguard/values-es/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispositivo bloqueado por el administrador"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"El dispositivo se ha bloqueado manualmente"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"No se reconoce"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Para usar Desbloqueo Facial, habilita el "<b>"acceso a la cámara"</b>" en Ajustes y privacidad"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Desbloqueo facial: activa el acceso a la cámara"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Introduce el PIN de la tarjeta SIM. Te quedan <xliff:g id="NUMBER_1">%d</xliff:g> intentos.</item> <item quantity="one">Introduce el PIN de la tarjeta SIM. Te queda <xliff:g id="NUMBER_0">%d</xliff:g> intento para tener que ponerte en contacto con tu operador para desbloquear el dispositivo.</item> diff --git a/packages/SystemUI/res-keyguard/values-et/strings.xml b/packages/SystemUI/res-keyguard/values-et/strings.xml index 9488054322d0..74ce06c3a00a 100644 --- a/packages/SystemUI/res-keyguard/values-et/strings.xml +++ b/packages/SystemUI/res-keyguard/values-et/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administraator lukustas seadme"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Seade lukustati käsitsi"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ei tuvastatud"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Näoga avamise kasutamiseks lülitage menüüs Seaded > Privaatsus sisse "<b>"juurdepääs kaamerale"</b>"."</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Näoga avamise kasutamiseks andke seadetes juurdepääs kaamerale"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Sisestage SIM-kaardi PIN-kood. Jäänud on <xliff:g id="NUMBER_1">%d</xliff:g> katset.</item> <item quantity="one">Sisestage SIM-kaardi PIN-kood. Jäänud on <xliff:g id="NUMBER_0">%d</xliff:g> katse enne, kui peate seadme avamiseks ühendust võtma operaatoriga.</item> diff --git a/packages/SystemUI/res-keyguard/values-eu/strings.xml b/packages/SystemUI/res-keyguard/values-eu/strings.xml index 41d467a8341b..19fc68a40ca0 100644 --- a/packages/SystemUI/res-keyguard/values-eu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-eu/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administratzaileak blokeatu egin du gailua"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Eskuz blokeatu da gailua"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ez da ezagutu"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Aurpegi bidez desblokeatzeko aukera erabiltzeko, aktibatu "<b>"kamera atzitzeko baimena"</b>" Ezarpenak > Pribatutasuna atalean"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Aurpegi bidezko desblokeoak kamera atzitzeko baimena behar du"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Idatzi SIMaren PINa. <xliff:g id="NUMBER_1">%d</xliff:g> saiakera geratzen zaizkizu.</item> <item quantity="one">Idatzi SIMaren PINa. <xliff:g id="NUMBER_0">%d</xliff:g> saiakera geratzen zaizu; oker idatziz gero, operadoreari eskatu beharko diozu gailua desblokeatzeko.</item> diff --git a/packages/SystemUI/res-keyguard/values-fa/strings.xml b/packages/SystemUI/res-keyguard/values-fa/strings.xml index 11e401e40b33..6b90e8936199 100644 --- a/packages/SystemUI/res-keyguard/values-fa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fa/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"دستگاه توسط سرپرست سیستم قفل شده است"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"دستگاه بهصورت دستی قفل شده است"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"شناسایی نشد"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"برای استفاده از «قفلگشایی با چهره»، "<b>"دسترسی به دوربین"</b>" را در «تنظیمات > حریم خصوصی» روشن کنید"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"برای استفاده از قفلگشایی با چهره، دسترسی دوربین را در تنظیمات روشن کنید"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">پین سیمکارت را وارد کنید. <xliff:g id="NUMBER_1">%d</xliff:g> تلاش دیگری باقی مانده است.</item> <item quantity="other">پین سیمکارت را وارد کنید. <xliff:g id="NUMBER_1">%d</xliff:g> تلاش دیگری باقی مانده است.</item> diff --git a/packages/SystemUI/res-keyguard/values-fi/strings.xml b/packages/SystemUI/res-keyguard/values-fi/strings.xml index 2fbb8ab2265d..f8aa5de1f268 100644 --- a/packages/SystemUI/res-keyguard/values-fi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fi/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Järjestelmänvalvoja lukitsi laitteen."</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Laite lukittiin manuaalisesti"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ei tunnistettu"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Jos haluat käyttää kasvojentunnistusavausta, valitse Asetukset > Yksityisyys ja laita "<b>"Pääsy kameraan"</b>" päälle"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Kasvojentunnistusavaus: Asetukset > pääsy kameraan"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Anna SIM-kortin PIN-koodi. Sinulla on <xliff:g id="NUMBER_1">%d</xliff:g> yritystä jäljellä.</item> <item quantity="one">Anna SIM-kortin PIN-koodi. <xliff:g id="NUMBER_0">%d</xliff:g> yrityksen jälkeen laite lukittuu, ja vain operaattori voi avata sen.</item> diff --git a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml index da81aa3ee965..0e9800707cc8 100644 --- a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"L\'appareil a été verrouillé par l\'administrateur"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"L\'appareil a été verrouillé manuellement"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Doigt non reconnu"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Pour utiliser le déverrouillage par reconnaissance faciale, activez l\'"<b>"accès à l\'appareil photo"</b>" dans Paramètres > Confidentialité"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Déverr. rec. faciale : activez accès app. photo dans Param."</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Entrez le NIP de votre carte SIM. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentative.</item> <item quantity="other">Entrez le NIP de votre carte SIM. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentatives.</item> diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml index e1cde72a0239..cf79eab5155c 100644 --- a/packages/SystemUI/res-keyguard/values-fr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Appareil verrouillé par l\'administrateur"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Appareil verrouillé manuellement"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Non reconnu"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Pour utiliser le déverrouillage par reconnaissance faciale, activez "<b>"Accès à l\'appareil photo"</b>" dans Paramètres > Confidentialité"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Pour le déverrouillage par reconnaissance faciale, activez l\'accès à l\'app. photo dans Paramètres"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Saisissez le code de la carte SIM. <xliff:g id="NUMBER_1">%d</xliff:g> tentative restante.</item> <item quantity="other">Saisissez le code de la carte SIM. <xliff:g id="NUMBER_1">%d</xliff:g> tentatives restantes.</item> diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml index b1c14fe59c9e..0d06dd8bb232 100644 --- a/packages/SystemUI/res-keyguard/values-gl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"O administrador bloqueou o dispositivo"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"O dispositivo bloqueouse manualmente"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Non se recoñeceu"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Para usar o desbloqueo facial, activa "<b>"Acceso á cámara"</b>" en Configuración > Privacidade"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"O Desbloqueo facial necesita acceso á cámara"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Introduce o código PIN da SIM. Quédanche <xliff:g id="NUMBER_1">%d</xliff:g> intentos.</item> <item quantity="one">Introduce o código PIN da SIM. Quédache <xliff:g id="NUMBER_0">%d</xliff:g> intento antes de que teñas que contactar co operador para desbloquear o dispositivo.</item> diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml index 5dc4a1c77b3d..6142aa15049e 100644 --- a/packages/SystemUI/res-keyguard/values-gu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"વ્યવસ્થાપકે ઉપકરણ લૉક કરેલું છે"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ઉપકરણ મેન્યુઅલી લૉક કર્યું હતું"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ઓળખાયેલ નથી"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"ફેસ અનલૉક સુવિધાનો ઉપયોગ કરવા માટે, સેટિંગ > પ્રાઇવસીમાં જઈને "<b>"કૅમેરા ઍક્સેસ"</b>" ચાલુ કરો"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ફેસ અનલૉક વાપરવા સેટિંગમાં કૅમેરા ઍક્સેસ ચાલુ કરો"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">સિમનો પિન દાખલ કરો, તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item> <item quantity="other">સિમનો પિન દાખલ કરો, તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસો બાકી છે.</item> diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml index 69a9dc93febb..742493aa1887 100644 --- a/packages/SystemUI/res-keyguard/values-hi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"व्यवस्थापक ने डिवाइस को लॉक किया है"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"डिवाइस को मैन्युअल रूप से लॉक किया गया था"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"पहचान नहीं हो पाई"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"फ़ेस अनलॉक की सुविधा का इस्तेमाल करने के लिए, सेटिंग और निजता में जाकर, "<b>"कैमरे का ऐक्सेस"</b>" चालू करें"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"\'फ़ेस अनलॉक\' इस्तेमाल करने के लिए, सेटिंग में जाकर कैमरे का ऐक्सेस चालू करें"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">सिम का पिन डालें. आपके पास <xliff:g id="NUMBER_1">%d</xliff:g> मौके बचे हैं.</item> <item quantity="other">सिम का पिन डालें. आपके पास <xliff:g id="NUMBER_1">%d</xliff:g> मौके बचे हैं.</item> diff --git a/packages/SystemUI/res-keyguard/values-hr/strings.xml b/packages/SystemUI/res-keyguard/values-hr/strings.xml index de660d8cf8fd..292bfd18637b 100644 --- a/packages/SystemUI/res-keyguard/values-hr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hr/strings.xml @@ -92,7 +92,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administrator je zaključao uređaj"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Uređaj je ručno zaključan"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nije prepoznato"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Da biste koristili otključavanje licem, uključite opciju "<b>"Pristup kameri"</b>" u odjeljku Postavke > Privatnost"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Za otključavanje licem uključite pristup kameri"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item> <item quantity="few">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item> diff --git a/packages/SystemUI/res-keyguard/values-hu/strings.xml b/packages/SystemUI/res-keyguard/values-hu/strings.xml index 88547404e168..b647f168ea0a 100644 --- a/packages/SystemUI/res-keyguard/values-hu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hu/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"A rendszergazda zárolta az eszközt"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Az eszközt manuálisan lezárták"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nem ismerhető fel"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Az Arcalapú feloldás funkció használatához kapcsolja be a "<b>"Hozzáférés a kamerához"</b>" beállítást a Beállítások > Adatvédelem szakaszban."</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Arcalapú feloldáshoz Hozzáférés a kamerához szükséges"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Adja meg a SIM-kártya PIN-kódját. <xliff:g id="NUMBER_1">%d</xliff:g> próbálkozása maradt.</item> <item quantity="one">Adja meg a SIM-kártya PIN-kódját. <xliff:g id="NUMBER_0">%d</xliff:g> próbálkozása maradt. Ha elfogynak a próbálkozási lehetőségek, az eszköz feloldásához fel kell vennie a kapcsolatot szolgáltatójával.</item> diff --git a/packages/SystemUI/res-keyguard/values-hy/strings.xml b/packages/SystemUI/res-keyguard/values-hy/strings.xml index 94fdedde0b8d..2af6e7bbf619 100644 --- a/packages/SystemUI/res-keyguard/values-hy/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hy/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Սարքը կողպված է ադմինիստրատորի կողմից"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Սարքը կողպվել է ձեռքով"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Չհաջողվեց ճանաչել"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Դեմքով ապակողպումն օգտագործելու համար անցեք Կարգավորումներ > Գաղտնիություն և տրամադրեք "<b>"տեսախցիկն օգտագործելու թույլտվություն"</b>"։"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Դեմքով ապակողպման համար թույլատրեք տեսախցիկի օգտագործումը"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Մուտքագրեք SIM քարտի PIN կոդը: Մնացել է <xliff:g id="NUMBER_1">%d</xliff:g> փորձ:</item> <item quantity="other">Մուտքագրեք SIM քարտի PIN կոդը: Մնացել է <xliff:g id="NUMBER_1">%d</xliff:g> փորձ:</item> diff --git a/packages/SystemUI/res-keyguard/values-in/strings.xml b/packages/SystemUI/res-keyguard/values-in/strings.xml index b16031ab9a71..1bd0db26d27c 100644 --- a/packages/SystemUI/res-keyguard/values-in/strings.xml +++ b/packages/SystemUI/res-keyguard/values-in/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Perangkat dikunci oleh admin"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Perangkat dikunci secara manual"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tidak dikenali"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Untuk menggunakan Face Unlock, aktifkan "<b>"Akses kamera"</b>" di Setelan > Privasi"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Untuk pakai Face Unlock, beri akses kamera di Setelan"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Masukkan PIN SIM. Tersisa <xliff:g id="NUMBER_1">%d</xliff:g> percobaan.</item> <item quantity="one">Masukkan PIN SIM. Tersisa <xliff:g id="NUMBER_0">%d</xliff:g> percobaan sebelum Anda harus menghubungi operator untuk membuka kunci perangkat.</item> diff --git a/packages/SystemUI/res-keyguard/values-is/strings.xml b/packages/SystemUI/res-keyguard/values-is/strings.xml index 8f6b18b9ab4f..fc3af8403558 100644 --- a/packages/SystemUI/res-keyguard/values-is/strings.xml +++ b/packages/SystemUI/res-keyguard/values-is/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Kerfisstjóri læsti tæki"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Tækinu var læst handvirkt"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Þekktist ekki"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Þú verður að kveikja á "<b>"aðgangi að myndavél"</b>" í „Stillingar > persónuvernd“ til að nota andlitskenni"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Kveiktu á myndavélaaðgangi í stillingum til að nota andlitskenni"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Sláðu inn PIN-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraun eftir.</item> <item quantity="other">Sláðu inn PIN-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraunir eftir.</item> diff --git a/packages/SystemUI/res-keyguard/values-it/strings.xml b/packages/SystemUI/res-keyguard/values-it/strings.xml index f912a28d0342..81138f18a01c 100644 --- a/packages/SystemUI/res-keyguard/values-it/strings.xml +++ b/packages/SystemUI/res-keyguard/values-it/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispositivo bloccato dall\'amministratore"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Il dispositivo è stato bloccato manualmente"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Non riconosciuto"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Per utilizzare lo sblocco con il volto, attiva "<b>"l\'accesso alla fotocamera"</b>" in Impostazioni > Privacy"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Sblocco con volto richiede l\'accesso alla fotocamera"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Inserisci il codice PIN della SIM. Hai ancora <xliff:g id="NUMBER_1">%d</xliff:g> tentativi a disposizione.</item> <item quantity="one">Inserisci il codice PIN della SIM. Hai ancora <xliff:g id="NUMBER_0">%d</xliff:g> tentativo a disposizione, dopodiché dovrai contattare l\'operatore per sbloccare il dispositivo.</item> diff --git a/packages/SystemUI/res-keyguard/values-iw/strings.xml b/packages/SystemUI/res-keyguard/values-iw/strings.xml index ce43b15c7839..90b48289d802 100644 --- a/packages/SystemUI/res-keyguard/values-iw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-iw/strings.xml @@ -94,7 +94,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"המנהל של המכשיר נהל אותו"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"המכשיר ננעל באופן ידני"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"לא זוהתה"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"כדי להשתמש בתכונה \'פתיחה ע\"י זיהוי הפנים\', יש להפעיל את ה"<b>"גישה למצלמה"</b>" בהגדרות > פרטיות"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"לזיהוי הפנים יש להפעיל את הגישה למצלמה בהגדרות"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="two">יש להזין קוד אימות של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות נוספים.</item> <item quantity="many">יש להזין קוד אימות של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות נוספים.</item> diff --git a/packages/SystemUI/res-keyguard/values-ja/strings.xml b/packages/SystemUI/res-keyguard/values-ja/strings.xml index 07b3c87053d7..471bc12a2568 100644 --- a/packages/SystemUI/res-keyguard/values-ja/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ja/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"デバイスは管理者によりロックされています"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"デバイスは手動でロックされました"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"認識されませんでした"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"顔認証を使用するには、[設定] > [プライバシー] で"<b>"カメラへのアクセス"</b>"を有効にしてください"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"顔認証の使用: 設定でカメラアクセスを有効にしてください"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM PIN を入力してください。入力できるのはあと <xliff:g id="NUMBER_1">%d</xliff:g> 回です。</item> <item quantity="one">SIM PIN を入力してください。入力できるのはあと <xliff:g id="NUMBER_0">%d</xliff:g> 回です。この回数を超えた場合は、携帯通信会社にお問い合わせください。</item> diff --git a/packages/SystemUI/res-keyguard/values-ka/strings.xml b/packages/SystemUI/res-keyguard/values-ka/strings.xml index f2341c6f56d2..6f9fed978296 100644 --- a/packages/SystemUI/res-keyguard/values-ka/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ka/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"მოწყობილობა ჩაკეტილია ადმინისტრატორის მიერ"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"მოწყობილობა ხელით ჩაიკეტა"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"არ არის ამოცნობილი"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"იმისთვის, რომ სახით განბლოკვით ისარგებლოთ, ჩართეთ "<b>"კამერაზე წვდომა"</b>" პარამეტრებსა და კონფიდენციალურობაში"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"სახით განბლოკვით სარგებლობისთვის, ჩართეთ კამერაზე წვდომა პარამეტრებში"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">შეიყვანეთ SIM ბარათის PIN-კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER_1">%d</xliff:g> მცდელობა.</item> <item quantity="one">შეიყვანეთ SIM ბარათის PIN-კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER_0">%d</xliff:g> მცდელობა, რომლის შემდეგაც მოწყობილობის განსაბლოკად დაგჭირდებათ თქვენს ოპერატორთან დაკავშირება.</item> diff --git a/packages/SystemUI/res-keyguard/values-kk/strings.xml b/packages/SystemUI/res-keyguard/values-kk/strings.xml index 20bba0f9f271..f4a51bd9173f 100644 --- a/packages/SystemUI/res-keyguard/values-kk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kk/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Құрылғыны әкімші құлыптаған"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Құрылғы қолмен құлыпталды"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Танылмады"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Face Unlock функциясын пайдалану үшін \"Параметрлер > Құпиялылық\" бөлімінен "<b>"Камераны пайдалану рұқсатын"</b>" қосыңыз."</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Face Unlock функциясын пайдалану үшін параметрлерден камераны пайдалану рұқсатын қосыңыз."</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM PIN кодын енгізіңіз. <xliff:g id="NUMBER_1">%d</xliff:g> мүмкіндік қалды, одан кейін оператордан SIM картасының құлпын ашуды сұрауға тура келеді.</item> <item quantity="one">SIM PIN кодын енгізіңіз. <xliff:g id="NUMBER_0">%d</xliff:g> мүмкіндік қалды, одан кейін оператордан SIM картасының құлпын ашуды сұрауға тура келеді.</item> diff --git a/packages/SystemUI/res-keyguard/values-km/strings.xml b/packages/SystemUI/res-keyguard/values-km/strings.xml index 236c3189c2d2..8c90dec4f5fe 100644 --- a/packages/SystemUI/res-keyguard/values-km/strings.xml +++ b/packages/SystemUI/res-keyguard/values-km/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ឧបករណ៍ត្រូវបានចាក់សោដោយអ្នកគ្រប់គ្រង"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ឧបករណ៍ត្រូវបានចាក់សោដោយអ្នកប្រើផ្ទាល់"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"មិនអាចសម្គាល់បានទេ"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"ដើម្បីប្រើមុខងារដោះសោតាមទម្រង់មុខ សូមបើក"<b>"ការចូលប្រើកាមេរ៉ា"</b>"នៅក្នុងការកំណត់ > ឯកជនភាព"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ដើម្បីដោះសោតាមទម្រង់មុខ សូមបើកសិទ្ធិចូលប្រើកាមេរ៉ានៅក្នុងការកំណត់"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">បញ្ចូលកូដ PIN របស់ស៊ីម។ អ្នកនៅសល់ការព្យាយាម <xliff:g id="NUMBER_1">%d</xliff:g> ដងទៀត។</item> <item quantity="one">បញ្ចូលកូដ PIN របស់ស៊ីម។ អ្នកនៅសល់ការព្យាយាម <xliff:g id="NUMBER_0">%d</xliff:g> ដងទៀត មុនពេលដែលអ្នកត្រូវទាក់ទងទៅក្រុមហ៊ុនសេវាទូរសព្ទរបស់អ្នកដើម្បីដោះសោឧបករណ៍របស់អ្នក។</item> diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml index 716cbf616c99..3299872b3f3c 100644 --- a/packages/SystemUI/res-keyguard/values-kn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ನಿರ್ವಾಹಕರು ಸಾಧನವನ್ನು ಲಾಕ್ ಮಾಡಿದ್ದಾರೆ"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ಸಾಧನವನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"ಫೇಸ್ ಅನ್ಲಾಕ್ ಬಳಸಲು, ಸೆಟ್ಟಿಂಗ್ಗಳು > ಗೌಪ್ಯತೆ ಎಂಬಲ್ಲಿ "<b>"ಕ್ಯಾಮರಾ ಪ್ರವೇಶವನ್ನು"</b>" ಆನ್ ಮಾಡಿ"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ಫೇಸ್ ಅನ್ಲಾಕ್ ಬಳಸಲು, ಸೆಟ್ಟಿಂಗ್ಸ್ನಲ್ಲಿ ಕ್ಯಾಮರಾ ಪ್ರವೇಶ ಆನ್ ಮಾಡಿ"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">ಸಿಮ್ ಪಿನ್ ನಮೂದಿಸಿ. ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.</item> <item quantity="other">ಸಿಮ್ ಪಿನ್ ನಮೂದಿಸಿ. ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.</item> diff --git a/packages/SystemUI/res-keyguard/values-ko/strings.xml b/packages/SystemUI/res-keyguard/values-ko/strings.xml index e698017a95e4..ebddae216413 100644 --- a/packages/SystemUI/res-keyguard/values-ko/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ko/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"관리자가 기기를 잠갔습니다."</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"기기가 수동으로 잠금 설정되었습니다."</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"인식할 수 없음"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"얼굴 인식 잠금 해제를 사용하려면 설정 > 개인 정보 보호에서 "<b>"카메라 액세스"</b>"를 사용 설정하세요."</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"얼굴 인식 잠금 해제를 사용하려면 설정에서 카메라 액세스를 사용 설정하세요."</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM PIN을 입력하세요. 입력은 <xliff:g id="NUMBER_1">%d</xliff:g>번 더 시도할 수 있습니다.</item> <item quantity="one">SIM PIN을 입력하세요. 입력에 <xliff:g id="NUMBER_0">%d</xliff:g>번 더 실패하면 이동통신사에 문의하여 기기를 잠금 해제해야 합니다.</item> diff --git a/packages/SystemUI/res-keyguard/values-ky/strings.xml b/packages/SystemUI/res-keyguard/values-ky/strings.xml index 1df29e1b7c2d..f6ed69dc3958 100644 --- a/packages/SystemUI/res-keyguard/values-ky/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ky/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Түзмөктү администратор кулпулап койгон"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Түзмөк кол менен кулпуланды"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Таанылган жок"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Жүзүнөн таанып ачуу функциясын колдонуу үчүн Жөндөөлөр > Купуялык бөлүмүнө өтүп, "<b>"Камераны колдонууну"</b>" күйгүзүңүз"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Жөндөөлөрдөн камерага уруксат беришиңиз керек"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM-картанын PIN кодун киргизиңиз. Сизде <xliff:g id="NUMBER_1">%d</xliff:g> аракет калды.</item> <item quantity="one">SIM-картанын PIN кодун киргизиңиз. Сизде <xliff:g id="NUMBER_0">%d</xliff:g> аракет калды, андан кийин түзмөктү бөгөттөн чыгаруу үчүн байланыш операторуна кайрылышыңыз керек болот.</item> diff --git a/packages/SystemUI/res-keyguard/values-lo/strings.xml b/packages/SystemUI/res-keyguard/values-lo/strings.xml index a01cd7ccfe6c..1948f233fa41 100644 --- a/packages/SystemUI/res-keyguard/values-lo/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lo/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ອຸປະກອນຖືກລັອກໂດຍຜູ້ເບິ່ງແຍງລະບົບ"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ອຸປະກອນຖືກສັ່ງໃຫ້ລັອກ"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ບໍ່ຮູ້ຈັກ"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"ເພື່ອໃຊ້ການປົດລັອກດ້ວຍໜ້າ, ກະລຸນາເປີດໃຊ້ "<b>"ສິດເຂົ້າເຖິງກ້ອງຖ່າຍຮູບ"</b>" ໃນການຕັ້ງຄ່າ > ຄວາມເປັນສ່ວນຕົວ"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ເພື່ອໃຊ້ການປົດລັອກດ້ວຍໜ້າ, ໃຫ້ເປີດໃຊ້ສິດເຂົ້າເຖິງກ້ອງຖ່າຍຮູບໃນການຕັ້ງຄ່າ"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">ລະຫັດ SIM PIN ບໍ່ຖືກຕ້ອງ. ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ເທື່ອ.</item> <item quantity="one">ໃສ່ລະຫັດ SIM PIN. ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອກ່ອນທີ່ຈະຕ້ອງຕິດຕໍ່ຜູ້ໃຫ້ບໍລິການເພື່ອປົດລັອກ.</item> diff --git a/packages/SystemUI/res-keyguard/values-lt/strings.xml b/packages/SystemUI/res-keyguard/values-lt/strings.xml index 64e600e4cfde..59135a9ab3f8 100644 --- a/packages/SystemUI/res-keyguard/values-lt/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lt/strings.xml @@ -94,7 +94,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Įrenginį užrakino administratorius"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Įrenginys užrakintas neautomatiškai"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Neatpažinta"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Jei norite naudoti atrakinimą pagal veidą, įjunkite parinktį "<b>"Prieiga prie fotoaparato"</b>" skiltyje „Nustatymai“ > „Privatumas“"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Jei nor. naud. atr. pagal veidą, įj. pr. prie fotoap. sk. „Nustatymai“"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Įveskite SIM kortelės PIN kodą. Jums liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymas.</item> <item quantity="few">Įveskite SIM kortelės PIN kodą. Jums liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymai.</item> diff --git a/packages/SystemUI/res-keyguard/values-lv/strings.xml b/packages/SystemUI/res-keyguard/values-lv/strings.xml index 9cd30a1f4ff7..88bb11422d74 100644 --- a/packages/SystemUI/res-keyguard/values-lv/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lv/strings.xml @@ -92,7 +92,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administrators bloķēja ierīci."</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Ierīce tika bloķēta manuāli."</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nav atpazīts"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Lai izmantotu autorizāciju pēc sejas, sadaļā Iestatījumi > Konfidencialitāte ieslēdziet opciju "<b>"Piekļuve kamerai"</b>"."</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Lai izmantotu autorizāciju pēc sejas, iestatījumos ieslēdziet piekļuvi kamerai."</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="zero">Ievadiet SIM kartes PIN. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes.</item> <item quantity="one">Ievadiet SIM kartes PIN. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizi.</item> diff --git a/packages/SystemUI/res-keyguard/values-mk/strings.xml b/packages/SystemUI/res-keyguard/values-mk/strings.xml index c5cad18a2e6e..7eb7a00ae013 100644 --- a/packages/SystemUI/res-keyguard/values-mk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mk/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Уредот е заклучен од администраторот"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Уредот е заклучен рачно"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Непознат"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"За да користите „Отклучување со лик“, вклучете "<b>"Пристап до камерата"</b>" во „Поставки > Приватност“"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"За „Отклучување со лик“, вклучете пристап до камерата"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Внесете PIN-код за SIM-картичката. Ви преостанува уште <xliff:g id="NUMBER_1">%d</xliff:g> обид.</item> <item quantity="other">Внесете PIN-код за SIM-картичката. Ви преостануваат уште <xliff:g id="NUMBER_1">%d</xliff:g> обиди.</item> diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml index 2b0efc8d0817..32bf03c252b3 100644 --- a/packages/SystemUI/res-keyguard/values-ml/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ഉപകരണം അഡ്മിൻ ലോക്കുചെയ്തു"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ഉപകരണം നേരിട്ട് ലോക്കുചെയ്തു"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"തിരിച്ചറിയുന്നില്ല"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"ഫെയ്സ് അൺലോക്ക് ഉപയോഗിക്കാൻ, ക്രമീകരണം > സ്വകാര്യത എന്നതിൽ "<b>"ക്യാമറാ ആക്സസ്"</b>" ഓണാക്കുക"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ഫെയ്സ് അൺലോക്കിന് ക്രമീകരണത്തിൽ ക്യാമറാ ആക്സസ് ഓണാക്കൂ"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">സിം പിൻ നൽകുക. നിങ്ങൾക്ക് <xliff:g id="NUMBER_1">%d</xliff:g> ശ്രമങ്ങൾ കൂടി ശേഷിക്കുന്നു.</item> <item quantity="one">സിം പിൻ നൽകുക. ഉപകരണം അൺലോക്ക് ചെയ്യാൻ കാരിയറുമായി ബന്ധപ്പെടേണ്ടിവരുന്നതിന് മുമ്പ് <xliff:g id="NUMBER_0">%d</xliff:g> ശ്രമം കൂടി ശേഷിക്കുന്നു.</item> diff --git a/packages/SystemUI/res-keyguard/values-mn/strings.xml b/packages/SystemUI/res-keyguard/values-mn/strings.xml index 82fbaf1ac029..ba167cf1bc24 100644 --- a/packages/SystemUI/res-keyguard/values-mn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mn/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Админ төхөөрөмжийг түгжсэн"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Төхөөрөмжийг гараар түгжсэн"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Таньж чадсангүй"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Царайгаар түгжээ тайлахыг ашиглахын тулд Тохиргоо > Нууцлал хэсэгт "<b>" Камерын хандалтыг "</b>" асаана уу"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Царайгаар түгжээ тайлахыг ашиглахын тулд Тохиргоо хэсэгт камерын хандалтыг асаана уу"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM-н ПИН кодыг оруулна уу. Танд <xliff:g id="NUMBER_1">%d</xliff:g> оролдлого үлдлээ.</item> <item quantity="one">SIM-н ПИН кодыг оруулна уу. Танд оператор компанитайгаа холбогдохгүйгээр төхөөрөмжийн түгжээг тайлах <xliff:g id="NUMBER_0">%d</xliff:g> оролдлого үлдлээ.</item> diff --git a/packages/SystemUI/res-keyguard/values-mr/strings.xml b/packages/SystemUI/res-keyguard/values-mr/strings.xml index 012c83b468de..28368f9038dd 100644 --- a/packages/SystemUI/res-keyguard/values-mr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mr/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"प्रशासकाद्वारे लॉक केलेले डिव्हाइस"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"डिव्हाइस मॅन्युअली लॉक केले होते"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ओळखले नाही"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"फेस अनलॉक वापरण्यासाठी, सेटिंग्ज > गोपनीयता येथे "<b>"कॅमेरा अॅक्सेस"</b>" सुरू करा"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"फेस अनलॉक साठी, सेटिंग्ज मध्ये कॅमेराचा अॅक्सेस द्या"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">सिम पिन एंटर करा, तुमच्याकडे <xliff:g id="NUMBER_1">%d</xliff:g> प्रयत्न शिल्लक आहेत.</item> <item quantity="one">सिम पिन एंटर करा. तुम्ही तुमचे डिव्हाइस अनलॉक करण्यासाठी तुमच्या वाहकाशी संपर्क साधण्यापूर्वी, तुमच्याकडे <xliff:g id="NUMBER_0">%d</xliff:g> प्रयत्न शिल्लक आहे.</item> diff --git a/packages/SystemUI/res-keyguard/values-ms/strings.xml b/packages/SystemUI/res-keyguard/values-ms/strings.xml index 29672c16240d..e2efa906627e 100644 --- a/packages/SystemUI/res-keyguard/values-ms/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ms/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Peranti dikunci oleh pentadbir"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Peranti telah dikunci secara manual"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tidak dikenali"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Untuk menggunakan Buka Kunci Wajah, hidupkan "<b>"akses Kamera"</b>" dalam Tetapan > Privasi"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Hidupkan kamera dalam Tetapan untuk Buka Kunci Wajah"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Masukkan PIN SIM. Tinggal <xliff:g id="NUMBER_1">%d</xliff:g> percubaan lagi.</item> <item quantity="one">Masukkan PIN SIM. Tinggal <xliff:g id="NUMBER_0">%d</xliff:g> percubaan lagi sebelum anda perlu menghubungi pembawa anda untuk membuka kunci peranti.</item> diff --git a/packages/SystemUI/res-keyguard/values-my/strings.xml b/packages/SystemUI/res-keyguard/values-my/strings.xml index 91dcb9c43789..fd624502a276 100644 --- a/packages/SystemUI/res-keyguard/values-my/strings.xml +++ b/packages/SystemUI/res-keyguard/values-my/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"စက်ပစ္စည်းကို စီမံခန့်ခွဲသူက လော့ခ်ချထားပါသည်"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"စက်ပစ္စည်းကို ကိုယ်တိုင်ကိုယ်ကျ လော့ခ်ချထားခဲ့သည်"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"မသိ"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"မျက်နှာပြ လော့ခ်ဖွင့်ခြင်းကို သုံးရန် "<b>"ကင်မရာ သုံးခွင့်"</b>" ကို ‘ဆက်တင်များ > ကန့်သတ်ဆက်တင်’ တွင်ဖွင့်ပါ"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"‘မျက်နှာပြ လော့ခ်ဖွင့်ခြင်း’ သုံးရန် ‘ဆက်တင်များ’ တွင်ကင်မရာသုံးခွင့်ကိုဖွင့်ပါ"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">ဆင်းမ်ကတ် ပင်နံပါတ် ထည့်ပါ။ <xliff:g id="NUMBER_1">%d</xliff:g> ကြိမ် စမ်းသပ်ခွင့်ရှိပါသေးသည်။</item> <item quantity="one">ဆင်းမ်ကတ် ပင်နံပါတ် ထည့်ပါ။ သင့်စက်ကို လော့ခ်ဖွင့်ပေးရန်အတွက် ဝန်ဆောင်မှုပေးသူသို့ မဆက်သွယ်မီ <xliff:g id="NUMBER_0">%d</xliff:g> ကြိမ် စမ်းသပ်ခွင့်ရှိပါသေးသည်။</item> diff --git a/packages/SystemUI/res-keyguard/values-nb/strings.xml b/packages/SystemUI/res-keyguard/values-nb/strings.xml index c8d6b71eb485..474700c88e22 100644 --- a/packages/SystemUI/res-keyguard/values-nb/strings.xml +++ b/packages/SystemUI/res-keyguard/values-nb/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Enheten er låst av administratoren"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Enheten ble låst manuelt"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ikke gjenkjent"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"For å bruke ansiktslås, slå på "<b>"Kameratilgang"</b>" i Innstillinger > Personvern"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Slå på kameratilgang i Innstillinger for å bruke ansiktslås"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Skriv inn PIN-koden for SIM-kortet. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøk igjen.</item> <item quantity="one">Skriv inn PIN-koden for SIM-kortet. Du har <xliff:g id="NUMBER_0">%d</xliff:g> forsøk igjen før du må kontakte operatøren din for å låse opp enheten.</item> diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml index 39548de38f73..c55aa8f24951 100644 --- a/packages/SystemUI/res-keyguard/values-ne/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"प्रशासकले यन्त्रलाई लक गर्नुभएको छ"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"यन्त्रलाई म्यानुअल तरिकाले लक गरिएको थियो"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"पहिचान भएन"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"फेस अनलक प्रयोग गर्न \"सेटिङ तथा गोपनीयता\" मा गई "<b>"क्यामेरा प्रयोग गर्ने अनुमति"</b>" दिनुहोस्"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"तपाईं \"फेस अनलक\" प्रयोग गर्न चाहनुहुन्छ भने सेटिङमा गई क्यामेरा प्रयोग गर्ने अनुमति दिनुहोस्"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM को PIN प्रविष्टि गर्नुहोस्। तपाईंसँग <xliff:g id="NUMBER_1">%d</xliff:g> प्रयासहरू बाँकी छन्।</item> <item quantity="one">SIM को PIN प्रविष्टि गर्नुहोस्। तपाईंसँग <xliff:g id="NUMBER_0">%d</xliff:g> प्रयास बाँकी छ, त्यसपछि भने आफ्नो डिभाइस अनलक गर्नका लागि तपाईंले अनिवार्य रूपमा आफ्नो सेवा प्रदायकलाई सम्पर्क गर्नु पर्ने हुन्छ।</item> diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml index e97fde489361..18558eb3dbe7 100644 --- a/packages/SystemUI/res-keyguard/values-nl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Apparaat vergrendeld door beheerder"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Apparaat is handmatig vergrendeld"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Niet herkend"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Als je Ontgrendelen via gezichtsherkenning wilt gebruiken, zet je "<b>"Cameratoegang"</b>" aan via Instellingen > Privacy"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Zet cameratoegang aan in Instellingen om Ontgrendelen via gezichtsherkenning te gebruiken"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Geef de pincode van de simkaart op. Je hebt nog <xliff:g id="NUMBER_1">%d</xliff:g> pogingen over.</item> <item quantity="one">Geef de pincode van de simkaart op. Je hebt nog <xliff:g id="NUMBER_0">%d</xliff:g> poging over voordat je contact met je provider moet opnemen om het apparaat te ontgrendelen.</item> diff --git a/packages/SystemUI/res-keyguard/values-or/strings.xml b/packages/SystemUI/res-keyguard/values-or/strings.xml index 9f8c7d98129a..239cc8ff66f2 100644 --- a/packages/SystemUI/res-keyguard/values-or/strings.xml +++ b/packages/SystemUI/res-keyguard/values-or/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ଡିଭାଇସ୍ ଆଡମିନଙ୍କ ଦ୍ୱାରା ଲକ୍ କରାଯାଇଛି"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ଡିଭାଇସ୍ ମାନୁଆଲ ଭାବେ ଲକ୍ କରାଗଲା"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ଚିହ୍ନଟ ହେଲାନାହିଁ"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"ଫେସ ଅନଲକ ବ୍ୟବହାର କରିବା ପାଇଁ, ସେଟିଂସ ଏବଂ ଗୋପନୀୟତାରେ "<b>"କ୍ୟାମେରା ଆକ୍ସେସ"</b>"କୁ ଚାଲୁ କରନ୍ତୁ"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ଫେସ ଅନଲକର ବ୍ୟବହାର ପାଇଁ ସେଟିଂସରେ କ୍ୟାମେରାକୁ ଆକ୍ସେସ ଦିଅ"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM PIN ଲେଖନ୍ତୁ। ଆପଣଙ୍କ ଡିଭାଇସକୁ ଅନଲକ କରିବା ପାଇଁ ପାଖରେ ବଳକା ଥିବା <xliff:g id="NUMBER_1">%d</xliff:g>ଟି ପ୍ରୟାସର ବ୍ୟବହାର କରିବା ପୂର୍ବରୁ ନିଜର କ୍ଯାରିଅରଙ୍କ ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ।</item> <item quantity="one">SIM PIN ଲେଖନ୍ତୁ। ଆପଣଙ୍କ ଡିଭାଇସକୁ ଅନଲକ କରିବା ପାଇଁ ପାଖରେ ବଳକା ଥିବା <xliff:g id="NUMBER_0">%d</xliff:g>ଟି ପ୍ରୟାସର ବ୍ୟବହାର କରିବା ପୂର୍ବରୁ ନିଜର କ୍ଯାରିଅରଙ୍କ ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ।</item> diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml index 858682c96e2a..243bbc3b6291 100644 --- a/packages/SystemUI/res-keyguard/values-pa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਡੀਵਾਈਸ ਨੂੰ ਲਾਕ ਕੀਤਾ ਗਿਆ"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ਡੀਵਾਈਸ ਨੂੰ ਹੱਥੀਂ ਲਾਕ ਕੀਤਾ ਗਿਆ"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"ਫ਼ੇਸ ਅਣਲਾਕ ਨੂੰ ਵਰਤਣ ਲਈ, ਸੈਟਿੰਗਾਂ > ਪਰਦੇਦਾਰੀ ਵਿੱਚ ਜਾ ਕੇ "<b>"ਕੈਮਰਾ ਪਹੁੰਚ"</b>" ਨੂੰ ਚਾਲੂ ਕਰੋ"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ਫ਼ੇਸ ਅਣਲਾਕ ਵਰਤਣ ਲਈ, ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਕੈਮਰਾ ਪਹੁੰਚ ਚਾਲੂ ਕਰੋ"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ। ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</item> <item quantity="other">ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ। ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।</item> diff --git a/packages/SystemUI/res-keyguard/values-pl/strings.xml b/packages/SystemUI/res-keyguard/values-pl/strings.xml index f1a53e03abd2..5165b10f02d0 100644 --- a/packages/SystemUI/res-keyguard/values-pl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pl/strings.xml @@ -94,7 +94,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Urządzenie zablokowane przez administratora"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Urządzenie zostało zablokowane ręcznie"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nie rozpoznano"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Aby używać rozpoznawania twarzy, włącz "<b>"dostęp do aparatu"</b>" w Ustawieniach i prywatności"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Aby używać rozpoznawania twarzy, włącz w Ustawieniach dostęp do aparatu"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="few">Wpisz kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby.</item> <item quantity="many">Wpisz kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> prób.</item> diff --git a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml index aecc5f205a5b..04206fdc36de 100644 --- a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispositivo bloqueado pelo administrador"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"O dispositivo foi bloqueado manualmente"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Não reconhecido"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Para usar o Desbloqueio facial, ative o "<b>"acesso à câmera"</b>" em Configurações > Privacidade"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Para usar o Desbloqueio facial, ative o acesso à câmera nas Configurações"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Informe o PIN do chip. Você tem <xliff:g id="NUMBER_1">%d</xliff:g> tentativa restante.</item> <item quantity="other">Informe o PIN do chip. Você tem <xliff:g id="NUMBER_1">%d</xliff:g> tentativas restantes.</item> diff --git a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml index a8d8f349ca1e..abfed2e177cb 100644 --- a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispositivo bloqueado pelo gestor"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"O dispositivo foi bloqueado manualmente"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Não reconhecido."</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Para utilizar o Desbloqueio facial, ative o "<b>"Acesso à câmara"</b>" em Definições > Privacidade"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Ative acesso à câmara nas Def. p/ usar Desbl. facial"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Introduza o PIN do cartão SIM. Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas.</item> <item quantity="one">Introduza o PIN do cartão SIM. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de ser necessário contactar o operador para desbloquear o dispositivo.</item> diff --git a/packages/SystemUI/res-keyguard/values-pt/strings.xml b/packages/SystemUI/res-keyguard/values-pt/strings.xml index aecc5f205a5b..04206fdc36de 100644 --- a/packages/SystemUI/res-keyguard/values-pt/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispositivo bloqueado pelo administrador"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"O dispositivo foi bloqueado manualmente"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Não reconhecido"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Para usar o Desbloqueio facial, ative o "<b>"acesso à câmera"</b>" em Configurações > Privacidade"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Para usar o Desbloqueio facial, ative o acesso à câmera nas Configurações"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Informe o PIN do chip. Você tem <xliff:g id="NUMBER_1">%d</xliff:g> tentativa restante.</item> <item quantity="other">Informe o PIN do chip. Você tem <xliff:g id="NUMBER_1">%d</xliff:g> tentativas restantes.</item> diff --git a/packages/SystemUI/res-keyguard/values-ro/strings.xml b/packages/SystemUI/res-keyguard/values-ro/strings.xml index 04fe6be2902f..884d8d26dc7f 100644 --- a/packages/SystemUI/res-keyguard/values-ro/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ro/strings.xml @@ -92,7 +92,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Dispozitiv blocat de administrator"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Dispozitivul a fost blocat manual"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nu este recunoscut"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Pentru a folosi Deblocarea facială, activați "<b>"Accesul la cameră"</b>" în Setări și confidențialitate"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Pentru Deblocare facială, activați accesul la cameră"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="few">Introduceți codul PIN pentru cardul SIM. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> încercări.</item> <item quantity="other">Introduceți codul PIN pentru cardul SIM. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> de încercări.</item> diff --git a/packages/SystemUI/res-keyguard/values-ru/strings.xml b/packages/SystemUI/res-keyguard/values-ru/strings.xml index 364c8b70fc6f..435a40cf3c9a 100644 --- a/packages/SystemUI/res-keyguard/values-ru/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ru/strings.xml @@ -94,7 +94,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Устройство заблокировано администратором"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Устройство было заблокировано вручную"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не распознано"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Чтобы использовать фейсконтроль, разрешите "<b>"доступ к камере"</b>". Для этого перейдите в настройки и нажмите \"Конфиденциальность\"."</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"В настройках разрешите фейсконтролю доступ к камере."</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Введите PIN-код. Осталась <xliff:g id="NUMBER_1">%d</xliff:g> попытка.</item> <item quantity="few">Введите PIN-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попытки.</item> diff --git a/packages/SystemUI/res-keyguard/values-si/strings.xml b/packages/SystemUI/res-keyguard/values-si/strings.xml index 5e934cc230ec..ada19dd42602 100644 --- a/packages/SystemUI/res-keyguard/values-si/strings.xml +++ b/packages/SystemUI/res-keyguard/values-si/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ඔබගේ පරිපාලක විසින් උපාංගය අගුළු දමා ඇත"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"උපාංගය හස්තීයව අගුලු දමන ලදී"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"හඳුනා නොගන්නා ලදී"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"මුහුණෙන් අගුලු හැරීම භාවිත කිරීමට, සැකසීම් > පෞද්ගලිකත්වය තුළ "<b>"කැමරා ප්රවේශය"</b>" ක්රියාත්මක කරන්න"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"මුහුණෙන් අගුලු හැරීමට, සැකසීම් තුළ කැමරා ප්රවේශය සක්රීය කරන්න"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">SIM PIN ඇතුළු කරන්න, ඔබ සතුව උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g>ක් ඉතිරිව ඇත.</item> <item quantity="other">SIM PIN ඇතුළු කරන්න, ඔබ සතුව උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g>ක් ඉතිරිව ඇත.</item> diff --git a/packages/SystemUI/res-keyguard/values-sk/strings.xml b/packages/SystemUI/res-keyguard/values-sk/strings.xml index 187683fa3841..b1bff53ea513 100644 --- a/packages/SystemUI/res-keyguard/values-sk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sk/strings.xml @@ -94,7 +94,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Zariadenie zamkol správca"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Zariadenie bolo uzamknuté ručne"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nerozpoznané"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Ak chcete používať odomknutie tvárou, v sekcii Nastavenia > Ochrana súkromia zapnite "<b>"prístup ku kamere"</b></string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"V nastaveniach zapnite prístup ku kamere"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="few">Zadajte kód PIN SIM karty. Zostávajú vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusy.</item> <item quantity="many">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item> diff --git a/packages/SystemUI/res-keyguard/values-sl/strings.xml b/packages/SystemUI/res-keyguard/values-sl/strings.xml index 17c590f399a1..274a24ea4717 100644 --- a/packages/SystemUI/res-keyguard/values-sl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sl/strings.xml @@ -94,7 +94,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Napravo je zaklenil skrbnik"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Naprava je bila ročno zaklenjena"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ni prepoznano"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Če želite uporabljati odklepanje z obrazom, v meniju »Nastavitve« > »Zasebnost« vklopite možnost "<b>"Dostop do fotoaparata"</b>"."</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Odklepanje z obrazom potrebuje dostop do fotoaparata."</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Vnesite kodo PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskus.</item> <item quantity="two">Vnesite kodo PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusa.</item> diff --git a/packages/SystemUI/res-keyguard/values-sq/strings.xml b/packages/SystemUI/res-keyguard/values-sq/strings.xml index 16adc13a4bb7..58773aeea473 100644 --- a/packages/SystemUI/res-keyguard/values-sq/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sq/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Pajisja është e kyçur nga administratori"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Pajisja është kyçur manualisht"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nuk njihet"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Për të përdorur \"Shkyçjen me fytyrë\", aktivizo "<b>"Qasjen te kamera"</b>" te \"Cilësimet\" > \"Privatësia\""</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Për \"Shkyçjen me fytyrë\", aktivizo qasjen te kamera te \"Cilësimet\""</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Fut kodin PIN të kartës SIM. Të kanë mbetur edhe <xliff:g id="NUMBER_1">%d</xliff:g> tentativa.</item> <item quantity="one">Fut kodin PIN të kartës SIM. Të ka mbetur edhe <xliff:g id="NUMBER_0">%d</xliff:g> tentativë para se të duhet të kontaktosh me operatorin tënd celular për ta shkyçur pajisjen.</item> diff --git a/packages/SystemUI/res-keyguard/values-sr/strings.xml b/packages/SystemUI/res-keyguard/values-sr/strings.xml index 2fb293952672..15c31a0eb981 100644 --- a/packages/SystemUI/res-keyguard/values-sr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sr/strings.xml @@ -92,7 +92,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Администратор је закључао уређај"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Уређај је ручно закључан"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Није препознат"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Да бисте користили откључавање лицем, укључите "<b>"приступ камери"</b>" у одељку Подешавања > Приватност"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Откључавање лицем тражи приступ камери у Подешавањима"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Унесите PIN за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушај.</item> <item quantity="few">Унесите PIN за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја.</item> diff --git a/packages/SystemUI/res-keyguard/values-sv/strings.xml b/packages/SystemUI/res-keyguard/values-sv/strings.xml index 8e58b901223c..8f8bddeed051 100644 --- a/packages/SystemUI/res-keyguard/values-sv/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sv/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Administratören har låst enheten"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Enheten har låsts manuellt"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Identifierades inte"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Om du vill använda ansiktslås aktiverar du "<b>"Kameraåtkomst"</b>" i Inställningar > Integritet"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"För ansiktslås aktiverar du kameraåtkomst i Inställn."</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Ange pinkod för SIM-kortet. <xliff:g id="NUMBER_1">%d</xliff:g> försök återstår.</item> <item quantity="one">Ange pinkod för SIM-kortet. <xliff:g id="NUMBER_0">%d</xliff:g> försök återstår innan du måste kontakta operatören för att låsa upp enheten.</item> diff --git a/packages/SystemUI/res-keyguard/values-sw/strings.xml b/packages/SystemUI/res-keyguard/values-sw/strings.xml index 193bb606bb62..06d168b488c5 100644 --- a/packages/SystemUI/res-keyguard/values-sw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sw/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Msimamizi amefunga kifaa"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Umefunga kifaa mwenyewe"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Haitambuliwi"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Ili utumie kipengele cha kufungua kwa uso, washa kipengele cha "<b>"ufikiaji wa Kamera"</b>" katika Mipangilio na Faragha"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Ili ufungue kwa Uso, ruhusu kamera ifikiwe"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Weka PIN ya SIM. Zimesalia mara <xliff:g id="NUMBER_1">%d</xliff:g> za kujaribu.</item> <item quantity="one">Weka PIN ya SIM. Ukijaribu tena mara <xliff:g id="NUMBER_0">%d</xliff:g> bila kufaulu, kifaa chako kitafungwa na utalazimika uwasiliane na mtoa huduma wako ili akifungue.</item> diff --git a/packages/SystemUI/res-keyguard/values-ta/strings.xml b/packages/SystemUI/res-keyguard/values-ta/strings.xml index cfa865a91c83..3531aa367ec4 100644 --- a/packages/SystemUI/res-keyguard/values-ta/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ta/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"நிர்வாகி சாதனத்தைப் பூட்டியுள்ளார்"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"பயனர் சாதனத்தைப் பூட்டியுள்ளார்"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"அடையாளங்காணபடவில்லை"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"முகம் காட்டித் திறத்தல் அம்சத்தைப் பயன்படுத்த, அமைப்புகள் > தனியுரிமை என்பதற்குச் சென்று "<b>"கேமரா அணுகலை"</b>" இயக்கவும்"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"முகம் காட்டித் திறத்தல் அம்சத்தைப் பயன்படுத்த, அமைப்புகளில் கேமரா அணுகலை இயக்கவும்"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">சிம் பின்னை உள்ளிடவும். மேலும், <xliff:g id="NUMBER_1">%d</xliff:g> வாய்ப்புகள் மீதமுள்ளன.</item> <item quantity="one">சிம் பின்னை உள்ளிடவும். மீதமுள்ள <xliff:g id="NUMBER_0">%d</xliff:g> வாய்ப்பில் தவறுதலான பின் உள்ளிடப்பட்டால், உங்கள் தொலைத்தொடர்பு நிறுவனத்தைத் தொடர்பு கொண்டு மட்டுமே சாதனத்தை அன்லாக் செய்ய முடியும்.</item> diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml index 4d2085b2d4a5..9a9e803cb72a 100644 --- a/packages/SystemUI/res-keyguard/values-te/strings.xml +++ b/packages/SystemUI/res-keyguard/values-te/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"పరికరం నిర్వాహకుల ద్వారా లాక్ చేయబడింది"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"పరికరం మాన్యువల్గా లాక్ చేయబడింది"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"గుర్తించలేదు"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"ఫేస్ అన్లాక్ను ఉపయోగించడానికి, సెట్టింగ్లు > గోప్యతలో "<b>"కెమెరా యాక్సెస్"</b>"ను ఆన్ చేయండి"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ఫేస్ అన్లాక్ వాడేందుకు కెమెరా యాక్సెస్ ఆన్లో ఉండాలి"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM పిన్ని నమోదు చేయండి. మీకు <xliff:g id="NUMBER_1">%d</xliff:g> ప్రయత్నలు మిగిలి ఉన్నాయి.</item> <item quantity="one">SIM పిన్ని నమోదు చేయండి, మీరు మీ పరికరాన్ని అన్లాక్ చేయడానికి తప్పనిసరిగా మీ క్యారియర్ను సంప్రదించడానికి ముందు మీకు <xliff:g id="NUMBER_0">%d</xliff:g> ప్రయత్నం మిగిలి ఉంది.</item> diff --git a/packages/SystemUI/res-keyguard/values-th/strings.xml b/packages/SystemUI/res-keyguard/values-th/strings.xml index 10bdd0c3eba8..69920542d20f 100644 --- a/packages/SystemUI/res-keyguard/values-th/strings.xml +++ b/packages/SystemUI/res-keyguard/values-th/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ผู้ดูแลระบบล็อกอุปกรณ์"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"มีการล็อกอุปกรณ์ด้วยตัวเอง"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"ไม่รู้จัก"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"หากต้องการใช้ปลดล็อกด้วยใบหน้า ให้เปิด"<b>"การเข้าถึงกล้อง"</b>"ในการตั้งค่าและความเป็นส่วนตัว"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"เปิดการเข้าถึงกล้องในการตั้งค่าเพื่อใช้การปลดล็อกด้วยใบหน้า"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">โปรดป้อน PIN ของซิม คุณพยายามได้อีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง</item> <item quantity="one">โปรดป้อน PIN ของซิม คุณพยายามได้อีก <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งก่อนที่จะต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์</item> diff --git a/packages/SystemUI/res-keyguard/values-tl/strings.xml b/packages/SystemUI/res-keyguard/values-tl/strings.xml index 85fcb7a4aac0..12b7635fe637 100644 --- a/packages/SystemUI/res-keyguard/values-tl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-tl/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Na-lock ng admin ang device"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Manual na na-lock ang device"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Hindi nakilala"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Para magamit ang Pag-unlock Gamit ang Mukha, i-on ang "<b>"Access sa camera"</b>" sa Mga Setting > Privacy"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Para sa Pag-unlock Gamit ang Mukha, i-on ang access ng camera sa Mga Setting"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Ilagay ang PIN ng SIM. Mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> natitirang pagsubok.</item> <item quantity="other">Ilagay ang PIN ng SIM. Mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> na natitirang pagsubok.</item> diff --git a/packages/SystemUI/res-keyguard/values-tr/strings.xml b/packages/SystemUI/res-keyguard/values-tr/strings.xml index e9c3d5a0bfe6..fb08042a81f0 100644 --- a/packages/SystemUI/res-keyguard/values-tr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-tr/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Cihaz, yönetici tarafından kilitlendi"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Cihazın manuel olarak kilitlendi"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tanınmadı"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Yüz Tanıma Kilidi\'ni kullanmak için Ayarlar > Gizlilik bölümünden "<b>"Kamera erişimi"</b>"\'ni açın"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Yüz Tanıma Kilidi için Ayarlar\'da kamera erişimini açın"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM PIN\'inizi girin. <xliff:g id="NUMBER_1">%d</xliff:g> deneme hakkınız kaldı.</item> <item quantity="one">SIM PIN\'inizi girin. Cihazınızın kilidini açmak için operatörünüzle bağlantı kurmak zorunda kalmadan önce <xliff:g id="NUMBER_0">%d</xliff:g> deneme hakkınız kaldı.</item> diff --git a/packages/SystemUI/res-keyguard/values-uk/strings.xml b/packages/SystemUI/res-keyguard/values-uk/strings.xml index ae2131c8fdd1..2aa4efc482b7 100644 --- a/packages/SystemUI/res-keyguard/values-uk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uk/strings.xml @@ -94,7 +94,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Адміністратор заблокував пристрій"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Пристрій заблоковано вручну"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не розпізнано"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Щоб використовувати фейсконтроль, увімкніть "<b>"Доступ до камери"</b>" в розділі \"Налаштування\" > \"Конфіденційність\""</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Для фейсконтролю надайте доступ до камери"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Введіть PIN-код SIM-карти. Залишилася <xliff:g id="NUMBER_1">%d</xliff:g> спроба.</item> <item quantity="few">Введіть PIN-код SIM-карти. Залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби.</item> diff --git a/packages/SystemUI/res-keyguard/values-ur/strings.xml b/packages/SystemUI/res-keyguard/values-ur/strings.xml index 3e1245e07df6..dafa2f638898 100644 --- a/packages/SystemUI/res-keyguard/values-ur/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ur/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"آلہ منتظم کی جانب سے مقفل ہے"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"آلہ کو دستی طور پر مقفل کیا گیا تھا"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"تسلیم شدہ نہیں ہے"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"فیس اَنلاک کا استعمال کرنے کے لیے، ترتیبات اور رازداری میں "<b>"کیمرے تک رسائی"</b>" کو آن کریں"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"فیس اَنلاک استعمال کرنے کیلئے، ترتیبات میں کیمرا تک رسائی کو آن کریں"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM کا PIN درج کریں، آپ کے پاس <xliff:g id="NUMBER_1">%d</xliff:g> کوششیں بچی ہیں۔</item> <item quantity="one">SIM کا PIN درج کریں، آپ کے پاس <xliff:g id="NUMBER_0">%d</xliff:g> کوشش بچی ہے، اس کے بعد آپ کو اپنا آلہ غیر مقفل کرنے کے لیے اپنے کیریئر سے رابطہ کرنا ہوگا۔</item> diff --git a/packages/SystemUI/res-keyguard/values-uz/strings.xml b/packages/SystemUI/res-keyguard/values-uz/strings.xml index e1169196d66e..df537ab67442 100644 --- a/packages/SystemUI/res-keyguard/values-uz/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uz/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Qurilma administrator tomonidan bloklangan"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Qurilma qo‘lda qulflangan"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Aniqlanmadi"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Yuz bilan ochish uchun Sozlamalar va maxfiylik orqali "<b>"kameraga kirishga ruxsat bering"</b></string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Yuz bilan ochish uchun kamera ruxsatini bering"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">SIM PIN kodini kiriting, sizda <xliff:g id="NUMBER_1">%d</xliff:g> ta urinish bor.</item> <item quantity="one">SIM PIN kodini kiriting, qurilmani qulfdan chiqarish uchun sizda <xliff:g id="NUMBER_0">%d</xliff:g> ta urinish bor.</item> diff --git a/packages/SystemUI/res-keyguard/values-vi/strings.xml b/packages/SystemUI/res-keyguard/values-vi/strings.xml index 15e35c4c4932..5d6fc50bd237 100644 --- a/packages/SystemUI/res-keyguard/values-vi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-vi/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Thiết bị đã bị quản trị viên khóa"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Thiết bị đã bị khóa theo cách thủ công"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Không nhận dạng được"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Để dùng tính năng Mở khoá bằng khuôn mặt, hãy bật tuỳ chọn "<b>"Truy cập máy ảnh"</b>" trong phần Cài đặt > Quyền riêng tư"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Cho phép truy cập máy ảnh để dùng Mở khóa bằng khuôn mặt"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">Hãy nhập mã PIN của SIM. Bạn còn <xliff:g id="NUMBER_1">%d</xliff:g> lần thử.</item> <item quantity="one">Hãy nhập mã PIN của SIM. Bạn còn <xliff:g id="NUMBER_0">%d</xliff:g> lần thử trước khi phải liên hệ với nhà mạng để mở khóa thiết bị của mình.</item> diff --git a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml index 0deee1775c30..e74fa75e7b44 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"管理员已锁定设备"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"此设备已手动锁定"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"无法识别"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"如需使用人脸解锁功能,请在“设置”>“隐私权”中开启"<b>"摄像头使用权限"</b></string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"如需使用人脸解锁功能,请在“设置”中开启摄像头使用权限"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">请输入 SIM 卡 PIN 码,您还可以尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次。</item> <item quantity="one">请输入 SIM 卡 PIN 码,您还可以尝试 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍不正确,则需要联系运营商帮您解锁设备。</item> diff --git a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml index 145bd2b9f6d4..c22ecdc28fce 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"裝置已由管理員鎖定"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"使用者已手動將裝置上鎖"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"未能識別"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"如要使用「面孔解鎖」,請在 [設定] > [私隱] 開啟"<b>"相機存取權"</b></string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"如要使用「面孔解鎖」,請在「設定」開啟相機存取權"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">輸入 SIM 卡的 PIN,您還可以再試 <xliff:g id="NUMBER_1">%d</xliff:g> 次。</item> <item quantity="one">輸入 SIM 卡的 PIN,您還可以再試 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍然輸入錯誤,您必須聯絡流動網絡供應商解鎖您的裝置。</item> diff --git a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml index f34f78e9a330..498f74834090 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"管理員已鎖定裝置"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"裝置已手動鎖定"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"無法識別"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"如要使用人臉解鎖功能,請前往「設定」>「隱私權」開啟"<b>"攝影機存取權"</b></string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"如要使用人臉解鎖功能,請在「設定」中開啟相機存取權。"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="other">請輸入 SIM 卡的 PIN 碼,你還可以再試 <xliff:g id="NUMBER_1">%d</xliff:g> 次。</item> <item quantity="one">請輸入 SIM 卡的 PIN 碼,你還可以再試 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍然失敗,就必須請電信業者為裝置解鎖。</item> diff --git a/packages/SystemUI/res-keyguard/values-zu/strings.xml b/packages/SystemUI/res-keyguard/values-zu/strings.xml index 76e05807011f..70bed322cc53 100644 --- a/packages/SystemUI/res-keyguard/values-zu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zu/strings.xml @@ -90,7 +90,7 @@ <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Idivayisi ikhiywe ngumlawuli"</string> <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Idivayisi ikhiywe ngokwenza"</string> <string name="kg_face_not_recognized" msgid="7903950626744419160">"Akwaziwa"</string> - <string name="kg_face_sensor_privacy_enabled" msgid="6513157891227284806">"Ukuze usebenzise Ukuvula ngobuso, vula "<b>"Ukufinyelela kwekhamera"</b>" kokuthi Amasethingi > Ubumfihlo"</string> + <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Ukuze usebenzise Ukuvula Ngobuso, vula ukufinyelela kwekhamera Kumasethingi"</string> <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818"> <item quantity="one">Faka i-PIN ye-SIM, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele.</item> <item quantity="other">Faka i-PIN ye-SIM, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele.</item> diff --git a/packages/SystemUI/res-keyguard/values/config.xml b/packages/SystemUI/res-keyguard/values/config.xml index a25ab5109fa8..b1d33758f1b3 100644 --- a/packages/SystemUI/res-keyguard/values/config.xml +++ b/packages/SystemUI/res-keyguard/values/config.xml @@ -28,6 +28,11 @@ <!-- Will display the bouncer on one side of the display, and the current user icon and user switcher on the other side --> <bool name="config_enableBouncerUserSwitcher">false</bool> + <!-- Whether to show the face scanning animation on devices with face auth supported. + The face scanning animation renders in a SW layer in ScreenDecorations. + Enabling this will also render the camera protection in the SW layer + (instead of HW, if relevant)."=--> + <bool name="config_enableFaceScanningAnimation">true</bool> <!-- Time to be considered a consecutive fingerprint failure in ms --> <integer name="fp_consecutive_failure_time_ms">3500</integer> </resources> diff --git a/packages/SystemUI/res-keyguard/values/strings.xml b/packages/SystemUI/res-keyguard/values/strings.xml index 64aa8ee84423..1be2d997719d 100644 --- a/packages/SystemUI/res-keyguard/values/strings.xml +++ b/packages/SystemUI/res-keyguard/values/strings.xml @@ -220,8 +220,8 @@ <!-- Face hint message when finger was not recognized. [CHAR LIMIT=20] --> <string name="kg_face_not_recognized">Not recognized</string> - <!-- Error message indicating that the camera privacy sensor has been turned on [CHAR LIMIT=NONE] --> - <string name="kg_face_sensor_privacy_enabled">To use Face Unlock, turn on <b>Camera access</b> in Settings > Privacy</string> + <!-- Error message indicating that the camera privacy sensor has been turned on [CHAR LIMIT=53] --> + <string name="kg_face_sensor_privacy_enabled">To use Face Unlock, turn on camera access in Settings</string> <!-- Instructions telling the user remaining times when enter SIM PIN view. --> <plurals name="kg_password_default_pin_message"> diff --git a/packages/SystemUI/res/drawable/keyguard_bottom_affordance_bg.xml b/packages/SystemUI/res/drawable/keyguard_bottom_affordance_bg.xml index 3a08a7111d9a..41123c84ded1 100644 --- a/packages/SystemUI/res/drawable/keyguard_bottom_affordance_bg.xml +++ b/packages/SystemUI/res/drawable/keyguard_bottom_affordance_bg.xml @@ -16,19 +16,13 @@ * limitations under the License. */ --> -<ripple +<shape xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" - android:color="?android:attr/textColorPrimary"> - <item> - <shape - android:shape="rectangle"> - <solid android:color="?androidprv:attr/colorSurface"/> - <size - android:width="@dimen/keyguard_affordance_width" - android:height="@dimen/keyguard_affordance_height"/> - <corners android:radius="@dimen/keyguard_affordance_fixed_radius"/> - </shape> - </item> -</ripple> - + android:shape="rectangle"> + <solid android:color="?androidprv:attr/colorSurface"/> + <size + android:width="@dimen/keyguard_affordance_width" + android:height="@dimen/keyguard_affordance_height"/> + <corners android:radius="@dimen/keyguard_affordance_fixed_radius"/> +</shape> diff --git a/packages/SystemUI/res/layout/auth_biometric_view.xml b/packages/SystemUI/res/layout/auth_biometric_view.xml deleted file mode 100644 index ee4da25f2284..000000000000 --- a/packages/SystemUI/res/layout/auth_biometric_view.xml +++ /dev/null @@ -1,26 +0,0 @@ -<!-- - ~ Copyright (C) 2022 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. - --> - -<com.android.systemui.biometrics.AuthBiometricView - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/contents" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - - <include layout="@layout/auth_biometric_contents"/> - -</com.android.systemui.biometrics.AuthBiometricView>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/media_ttt_chip.xml b/packages/SystemUI/res/layout/media_ttt_chip.xml index a502d33a0be1..4d24140abbf4 100644 --- a/packages/SystemUI/res/layout/media_ttt_chip.xml +++ b/packages/SystemUI/res/layout/media_ttt_chip.xml @@ -13,71 +13,85 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> -<LinearLayout +<!-- Wrap in a frame layout so that we can update the margins on the inner layout. (Since this view + is the root view of a window, we cannot change the root view's margins.) --> +<!-- Alphas start as 0 because the view will be animated in. --> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" android:id="@+id/media_ttt_sender_chip" - android:orientation="horizontal" android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:padding="@dimen/media_ttt_chip_outer_padding" - android:background="@drawable/media_ttt_chip_background" - android:layout_marginTop="50dp" - android:clipToPadding="false" - android:gravity="center_vertical" - > + android:layout_height="wrap_content"> - <com.android.internal.widget.CachingIconView - android:id="@+id/app_icon" - android:layout_width="@dimen/media_ttt_app_icon_size" - android:layout_height="@dimen/media_ttt_app_icon_size" - android:layout_marginEnd="12dp" - /> - - <TextView - android:id="@+id/text" + <LinearLayout + android:id="@+id/media_ttt_sender_chip_inner" + android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textSize="@dimen/media_ttt_text_size" - android:textColor="?android:attr/textColorPrimary" - /> + android:padding="@dimen/media_ttt_chip_outer_padding" + android:background="@drawable/media_ttt_chip_background" + android:layout_marginTop="20dp" + android:clipToPadding="false" + android:gravity="center_vertical" + android:alpha="0.0" + > - <!-- At most one of [loading, failure_icon, undo] will be visible at a time. --> + <com.android.internal.widget.CachingIconView + android:id="@+id/app_icon" + android:layout_width="@dimen/media_ttt_app_icon_size" + android:layout_height="@dimen/media_ttt_app_icon_size" + android:layout_marginEnd="12dp" + android:alpha="0.0" + /> - <ProgressBar - android:id="@+id/loading" - android:indeterminate="true" - android:layout_width="@dimen/media_ttt_status_icon_size" - android:layout_height="@dimen/media_ttt_status_icon_size" - android:layout_marginStart="@dimen/media_ttt_last_item_start_margin" - android:indeterminateTint="?androidprv:attr/colorAccentPrimaryVariant" - style="?android:attr/progressBarStyleSmall" - /> + <TextView + android:id="@+id/text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="@dimen/media_ttt_text_size" + android:textColor="?android:attr/textColorPrimary" + android:alpha="0.0" + /> - <ImageView - android:id="@+id/failure_icon" - android:layout_width="@dimen/media_ttt_status_icon_size" - android:layout_height="@dimen/media_ttt_status_icon_size" - android:layout_marginStart="@dimen/media_ttt_last_item_start_margin" - android:src="@drawable/ic_warning" - android:tint="@color/GM2_red_500" - /> + <!-- At most one of [loading, failure_icon, undo] will be visible at a time. --> + <ProgressBar + android:id="@+id/loading" + android:indeterminate="true" + android:layout_width="@dimen/media_ttt_status_icon_size" + android:layout_height="@dimen/media_ttt_status_icon_size" + android:layout_marginStart="@dimen/media_ttt_last_item_start_margin" + android:indeterminateTint="?androidprv:attr/colorAccentPrimaryVariant" + style="?android:attr/progressBarStyleSmall" + android:alpha="0.0" + /> - <TextView - android:id="@+id/undo" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/media_transfer_undo" - android:textColor="?androidprv:attr/textColorOnAccent" - android:layout_marginStart="@dimen/media_ttt_last_item_start_margin" - android:textSize="@dimen/media_ttt_text_size" - android:paddingStart="@dimen/media_ttt_chip_outer_padding" - android:paddingEnd="@dimen/media_ttt_chip_outer_padding" - android:paddingTop="@dimen/media_ttt_undo_button_vertical_padding" - android:paddingBottom="@dimen/media_ttt_undo_button_vertical_padding" - android:layout_marginTop="@dimen/media_ttt_undo_button_vertical_negative_margin" - android:layout_marginBottom="@dimen/media_ttt_undo_button_vertical_negative_margin" - android:background="@drawable/media_ttt_undo_background" - /> + <ImageView + android:id="@+id/failure_icon" + android:layout_width="@dimen/media_ttt_status_icon_size" + android:layout_height="@dimen/media_ttt_status_icon_size" + android:layout_marginStart="@dimen/media_ttt_last_item_start_margin" + android:src="@drawable/ic_warning" + android:tint="@color/GM2_red_500" + android:alpha="0.0" + /> + + <TextView + android:id="@+id/undo" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/media_transfer_undo" + android:textColor="?androidprv:attr/textColorOnAccent" + android:layout_marginStart="@dimen/media_ttt_last_item_start_margin" + android:textSize="@dimen/media_ttt_text_size" + android:paddingStart="@dimen/media_ttt_chip_outer_padding" + android:paddingEnd="@dimen/media_ttt_chip_outer_padding" + android:paddingTop="@dimen/media_ttt_undo_button_vertical_padding" + android:paddingBottom="@dimen/media_ttt_undo_button_vertical_padding" + android:layout_marginTop="@dimen/media_ttt_undo_button_vertical_negative_margin" + android:layout_marginBottom="@dimen/media_ttt_undo_button_vertical_negative_margin" + android:background="@drawable/media_ttt_undo_background" + android:alpha="0.0" + /> -</LinearLayout> + </LinearLayout> +</FrameLayout> diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index cbfcfd20d760..3eb73e09688b 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bevestig"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tik op Bevestig om te voltooi"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Ontsluit met gesig. Druk die ontsluitikoon om voort te gaan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Ontsluit met gesig. Druk om voort te gaan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Gesig is herken. Druk om voort te gaan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Gesig is herken. Druk die ontsluitikoon om voort te gaan."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Gestaaf"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Gebruik PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Gebruik patroon"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Swiep op om oop te maak"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Druk die onsluitikoon om oop te maak"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Ontsluit met gesig. Druk die ontsluitikoon om oop te maak."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Ontsluit met gesig. Druk om oop te maak."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Gesig is herken. Druk om oop te maak."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Gesig is herken. Druk die ontsluitikoon om oop te maak."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Beweeg links"</item> <item msgid="5558598599408514296">"Beweeg af"</item> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index fe7218b3753c..7fa8604dc2e5 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ተረጋግጧል"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ለማጠናቀቅ አረጋግጥን መታ ያድርጉ"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"በመልክ ተከፍቷል። ለመቀጠል የመክፈቻ አዶውን ይጫኑ።"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"በመልክ ተከፍቷል። ለመቀጠል ይጫኑ።"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"መልክ ተለይቶ ታውቋል። ለመቀጠል ይጫኑ።"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"መልክ ተለይቶ ታውቋል። ለመቀጠል የመክፈቻ አዶውን ይጫኑ።"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"የተረጋገጠ"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ፒን ይጠቀሙ"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ሥርዓተ ጥለትን ተጠቀም"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"ለመክፈት በጣት ወደ ላይ ጠረግ ያድርጉ"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"ለመክፈት የመክፈቻ አዶውን ይጫኑ"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"በመልክ ተከፍቷል። ለመክፈት የመክፈቻ አዶውን ይጫኑ።"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"በመልክ ተከፍቷል። ለመክፈት ይጫኑ።"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"መልክ ተለይቶ ታውቋል። ለመክፈት ይጫኑ።"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"መልክ ተለይቶ ታውቋል። ለመክፈት የመክፈቻ አዶውን ይጫኑ።"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"ወደ ግራ ውሰድ"</item> <item msgid="5558598599408514296">"ወደ ታች ውሰድ"</item> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 403f6e0a1999..fdb892712046 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"تمّ التأكيد."</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"يمكنك النقر على \"تأكيد\" لإكمال المهمة."</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"تم فتح القفل بالتعرّف على وجهك. للمتابعة، اضغط على رمز فتح القفل."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"تم فتح قفل جهازك عند تقريبه من وجهك. اضغط للمتابعة."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"تم التعرّف على الوجه. اضغط للمتابعة."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"تم التعرّف على الوجه. للمتابعة، اضغط على رمز فتح القفل."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"مصادقة"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"استخدام رقم تعريف شخصي"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"استخدام نقش"</string> @@ -321,6 +324,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"يمكنك الفتح بالتمرير سريعًا لأعلى."</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"اضغط على رمز فتح القفل لفتح قفل الشاشة."</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"تم فتح القفل بالتعرّف على وجهك. لفتح الجهاز، اضغط على رمز فتح القفل."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"تم فتح قفل جهازك عند تقريبه من وجهك. اضغط لفتح الجهاز."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"تم التعرّف على الوجه. اضغط لفتح الجهاز."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"تم التعرّف على الوجه. اضغط على رمز فتح القفل لفتح الجهاز."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"نقل لليسار"</item> <item msgid="5558598599408514296">"نقل للأسفل"</item> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 173a33e7e88d..73166e9606ab 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"নিশ্চিত কৰিলে"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"সম্পূৰ্ণ কৰিবলৈ নিশ্চিত কৰক-ত টিপক"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা হৈছে। অব্যাহত ৰাখিবলৈ আনলক কৰক চিহ্নটোত টিপক।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা হৈছে। অব্যাহত ৰাখিবলৈ টিপক।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"মুখাৱয়ব চিনাক্ত কৰা হৈছে। অব্যাহত ৰাখিবলৈ টিপক।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"মুখাৱয়ব চিনাক্ত কৰা হৈছে। অব্যাহত ৰাখিবলৈ আনলক কৰক চিহ্নটোত টিপক।"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰা হ’ল"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"পিন ব্যৱহাৰ কৰক"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"আৰ্হি ব্যৱহাৰ কৰক"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"খুলিবলৈ ওপৰলৈ ছোৱাইপ কৰক"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"খুলিবলৈ আনলক কৰক চিহ্নটোত টিপক"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা হৈছে। খুলিবলৈ আনলক কৰক চিহ্নটোত টিপক।"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা হৈছে। খুলিবলৈ টিপক।"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"মুখাৱয়ব চিনাক্ত কৰা হৈছে। খুলিবলৈ টিপক।"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"মুখাৱয়ব চিনাক্ত কৰা হৈছে। খুলিবলৈ আনলক কৰক চিহ্নটোত টিপক।"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"বাওঁফাললৈ নিয়ক"</item> <item msgid="5558598599408514296">"তললৈ নিয়ক"</item> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index f1a3c69eed5d..5bc28954230e 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Təsdiqləndi"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tamamlamaq üçün \"Təsdiq edin\" seçiminə toxunun"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Üzlə kilidi açılıb. \"Kilidi aç\" ikonasına basıb davam edin."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Üz ilə kiliddən çıxarılıb. Davam etmək üçün basın."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Üz tanınıb. Davam etmək üçün basın."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Üz tanınıb. \"Kiliddən çıxar\" ikonasına basıb davam edin."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Doğrulandı"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN istifadə edin"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Model istifadə edin"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Açmaq üçün yuxarı sürüşdürün"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"\"Kilidi aç\" ikonasına basıb açın"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Üzlə kilidi açılıb. \"Kilidi aç\" ikonasına basıb açın."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Üz ilə kiliddən çıxarılıb. Açmaq üçün basın."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Üz tanınıb. Açmaq üçün basın."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Üz tanınıb. \"Kiliddən çıxar\" ikonasına basıb açın."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Sola köçürün"</item> <item msgid="5558598599408514296">"Aşağı köçürün"</item> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 28b5923761b5..9437fb137cfc 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potvrđeno"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Dodirnite Potvrdi da biste završili"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Otključano je licem. Pritisnite ikonu otključavanja za nastavak"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Otključano je licem. Pritisnite da biste nastavili."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Lice je prepoznato. Pritisnite da biste nastavili."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Lice prepoznato. Pritisnite ikonu otključavanja za nastavak."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Identitet je potvrđen"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Koristite PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Koristite šablon"</string> @@ -315,6 +318,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Prevucite nagore da biste otvorili"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pritisnite ikonu otključavanja da biste otvorili."</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Otključano je licem. Pritisnite ikonu otključavanja da biste otvorili."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Otključano je licem. Pritisnite da biste otvorili."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Lice je prepoznato. Pritisnite da biste otvorili."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Lice prepoznato. Pritisnite ikonu otključavanja da biste otvorili."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Pomerite nalevo"</item> <item msgid="5558598599408514296">"Pomerite nadole"</item> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 46b3013025e8..d1596937c7bf 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Пацверджана"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Націсніце \"Пацвердзіць\", каб завяршыць"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Твар распазнаны. Для працягу націсніце значок разблакіроўкі."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Разблакіравана распазнаваннем твару. Націсніце для працягу."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Твар распазнаны. Націсніце для працягу."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Твар распазнаны. Для працягу націсніце значок разблакіроўкі."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Распазнана"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Увесці PIN-код"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Выкарыстаць узор разблакіроўкі"</string> @@ -317,6 +320,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Каб адкрыць, прагарніце ўверх"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Каб адкрыць, націсніце значок разблакіроўкі"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Твар распазнаны. Для адкрыцця націсніце значок разблакіроўкі"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Разблакіравана распазнаваннем твару. Націсніце, каб адкрыць."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Твар распазнаны. Націсніце, каб адкрыць."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Твар распазнаны. Для адкрыцця націсніце значок разблакіроўкі."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Перамясціце палец улева"</item> <item msgid="5558598599408514296">"Перамясціце палец ніжэй"</item> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 3837fe48ada7..2e0fb3700c4f 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Потвърдено"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Докоснете „Потвърждаване“ за завършване"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Отключено с лице. Натиснете иконата за отключване, за да продължите."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Отключено с лице. Натиснете, за да продължите."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Лицето бе разпознато. Натиснете, за да продължите."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Лицето бе разпознато. Продължете чрез иконата за отключване."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Удостоверено"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Използване на ПИН"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Използване на фигура"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Прекарайте пръст нагоре, за да отключите"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Натиснете иконата за отключване, за да отворите"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Отключено с лице. Натиснете иконата за отключване, за да отворите."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Отключено с лице. Натиснете за отваряне."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Лицето бе разпознато. Натиснете за отваряне."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Лицето бе разпознато. Отворете чрез иконата за отключване."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Преместване наляво"</item> <item msgid="5558598599408514296">"Преместване надолу"</item> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 3a351e68c17d..3ec1aa465ffc 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"কনফার্ম করা হয়েছে"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"সম্পূর্ণ করতে \'কনফার্ম করুন\' বোতামে ট্যাপ করুন"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ফেসের সাহায্যে আনলক করা হয়েছে। চালিয়ে যাওয়ার জন্য আনলক আইকনে প্রেস করুন।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ফেসের সাহায্যে আনলক করা হয়েছে। চালিয়ে যেতে প্রেস করুন।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ফেস শনাক্ত করা হয়েছে। চালিয়ে যেতে প্রেস করুন।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ফেস শনাক্ত করা হয়েছে। চালিয়ে যেতে আনলক আইকন প্রেস করুন।"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"প্রমাণীকৃত"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"পিন ব্যবহার করুন"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"প্যাটার্ন ব্যবহার করুন"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"খোলার জন্য উপরে সোয়াইপ করুন"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"খোলার জন্য আনলক আইকন প্রেস করুন"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ফেসের সাহায্যে আনলক করা হয়েছে। খোলার জন্য আনলক আইকন প্রেস করুন।"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ফেসের সাহায্যে আনলক করা হয়েছে। খোলার জন্য প্রেস করুন।"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ফেস শনাক্ত করা হয়েছে। খোলার জন্য প্রেস করুন।"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"ফেস শনাক্ত করা হয়েছে। খোলার জন্য আনলক আইকন প্রেস করুন।"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"বাঁদিকে সরান"</item> <item msgid="5558598599408514296">"নিচে নামান"</item> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 2569f54a824a..79442f8c8330 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potvrđeno"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Dodirnite Potvrdi da završite"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Otključano licem. Pritisnite ikonu za otklj. da nastavite."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Otključano licem. Pritisnite da nastavite."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Lice prepoznato. Pritisnite da nastavite."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Lice prepoznato. Pritisnite ikonu za otklj. da nastavite."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentificirano"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Koristi PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Koristi uzorak"</string> @@ -315,6 +318,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Prevucite da otvorite"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pritisnite ikonu za otključavanje da otvorite."</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Otključano licem. Pritisnite ikonu za otklj. da otvorite."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Otključano licem. Pritisnite da otvorite."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Lice prepoznato. Pritisnite da otvorite."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Lice prepoznato. Pritisnite ikonu za otklj. da otvorite."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Pomjeranje ulijevo"</item> <item msgid="5558598599408514296">"Pomjeranje nadolje"</item> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index ff702d641c64..497c2012e5e0 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmat"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toca Confirma per completar"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"S\'ha desbloquejat amb la cara. Prem la icona per continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"S\'ha desbloquejat amb la cara. Prem per continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"S\'ha reconegut la cara. Prem per continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"S\'ha reconegut la cara. Prem la icona per continuar."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticat"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Utilitza el PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Utilitza el patró"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Llisca cap amunt per obrir"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Prem la icona de desbloqueig per obrir"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"S\'ha desbloquejat amb la cara. Prem la icona per obrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"S\'ha desbloquejat amb la cara. Prem per obrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"S\'ha reconegut la cara. Prem per obrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"S\'ha reconegut la cara. Prem la icona per obrir."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Mou cap a l\'esquerra"</item> <item msgid="5558598599408514296">"Mou cap avall"</item> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index a9a3dc12d11a..e9f3a64d9fae 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potvrzeno"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Ověření dokončíte klepnutím na Potvrdit"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Odemknuto obličejem. Klepněte na ikonu odemknutí."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Odemknuto obličejem. Pokračujte stisknutím."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Obličej rozpoznán. Pokračujte stisknutím."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Obličej rozpoznán. Klepněte na ikonu odemknutí."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Ověřeno"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Použít kód PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Použít gesto"</string> @@ -317,6 +320,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Otevřete přejetím prstem nahoru"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Otevřete klepnutím na ikonu odemknutí"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Odemknuto obličejem. Klepněte na ikonu odemknutí."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Odemknuto obličejem. Stisknutím otevřete."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Obličej rozpoznán. Stisknutím otevřete."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Obličej rozpoznán. Klepněte na ikonu odemknutí."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Přesunout doleva"</item> <item msgid="5558598599408514296">"Přesunout dolů"</item> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 85325be56297..d56cb9b0282a 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bekræftet"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tryk på Bekræft for at udføre"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Låst op vha. ansigt. Tryk på oplåsningsikonet for at fortsætte."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Låst op ved hjælp af ansigt. Tryk for at fortsætte."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Ansigt genkendt. Tryk for at fortsætte."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Ansigt genkendt. Tryk på oplåsningsikonet for at fortsætte."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Godkendt"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Brug pinkode"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Brug mønster"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Stryg opad for at åbne"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Tryk på oplåsningsikonet for at åbne"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Låst op vha. ansigt. Tryk på oplåsningsikonet for at åbne."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Låst op ved hjælp af ansigt. Tryk for at åbne."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Ansigt genkendt. Tryk for at åbne."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Ansigt genkendt. Tryk på oplåsningsikonet for at åbne."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Flyt til venstre"</item> <item msgid="5558598599408514296">"Flyt ned"</item> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 41bfa4ab5a3f..97e403844c59 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bestätigt"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Zum Abschließen auf \"Bestätigen\" tippen"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Per Gesichtserkennung entsperrt. Tippe auf das Symbol „Entsperren“, um fortzufahren."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Gerät mit dem Gesicht entsperrt. Tippe, um fortzufahren."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Gesicht erkannt. Tippe, um fortzufahren."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Gesicht erkannt. Tippe zum Fortfahren auf das Symbol „Entsperren“."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authentifiziert"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN verwenden"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Muster verwenden"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Zum Öffnen nach oben wischen"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Tippe zum Öffnen auf das Symbol „Entsperren“"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Gerät mit dem Gesicht entsperrt. Tippe zum Öffnen auf das Symbol „Entsperren“."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Gerät mit dem Gesicht entsperrt. Tippe zum Öffnen."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Gesicht erkannt. Tippe zum Öffnen."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Gesicht erkannt. Tippe zum Öffnen auf das Symbol „Entsperren“."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Nach links bewegen"</item> <item msgid="5558598599408514296">"Nach unten bewegen"</item> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 67d18fcc0814..fe349b47caaf 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Επιβεβαιώθηκε"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Πατήστε Επιβεβαίωση για ολοκλήρωση"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Ξεκλείδωμα με πρόσωπο. Πατήστε το εικονίδιο ξεκλειδώματος."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Ξεκλείδωμα με αναγνώριση προσώπου. Πατήστε για συνέχεια."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Το πρόσωπο αναγνωρίστηκε. Πατήστε για συνέχεια."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Το πρόσωπο αναγνωρ. Πατήστε το εικον. ξεκλειδ. για συνέχεια."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Ολοκληρώθηκε ο έλεγχος ταυτότητας"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Χρήση PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Χρήση μοτίβου"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Σύρετε προς τα επάνω για άνοιγμα"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Πατήστε το εικονίδιο ξεκλειδώματος για άνοιγμα"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Ξεκλείδωμα με πρόσωπο. Πατήστε το εικονίδιο ξεκλειδώματος."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Ξεκλείδωμα με αναγνώριση προσώπου. Πατήστε για άνοιγμα."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Το πρόσωπο αναγνωρίστηκε. Πατήστε για άνοιγμα."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Το πρόσωπο αναγνωρ. Πατήστ. το εικον. ξεκλειδ. για άνοιγμα."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Μετακίνηση αριστερά"</item> <item msgid="5558598599408514296">"Μετακίνηση κάτω"</item> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index 0915843e0127..2c9d49510f46 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmed"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tap Confirm to complete"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Unlocked by face. Press the unlock icon to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Unlocked by face. Press to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Face recognised. Press to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Face recognised. Press the unlock icon to continue."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authenticated"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Use PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Use pattern"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe up to open"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Press the unlock icon to open"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Unlocked by face. Press the unlock icon to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Unlocked by face. Press to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Face recognised. Press to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Face recognised. Press the unlock icon to open."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Move left"</item> <item msgid="5558598599408514296">"Move down"</item> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index 3fed8c8a555c..5abb16cd6443 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmed"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tap Confirm to complete"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Unlocked by face. Press the unlock icon to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Unlocked by face. Press to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Face recognised. Press to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Face recognised. Press the unlock icon to continue."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authenticated"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Use PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Use pattern"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe up to open"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Press the unlock icon to open"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Unlocked by face. Press the unlock icon to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Unlocked by face. Press to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Face recognised. Press to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Face recognised. Press the unlock icon to open."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Move left"</item> <item msgid="5558598599408514296">"Move down"</item> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index 0915843e0127..2c9d49510f46 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmed"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tap Confirm to complete"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Unlocked by face. Press the unlock icon to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Unlocked by face. Press to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Face recognised. Press to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Face recognised. Press the unlock icon to continue."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authenticated"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Use PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Use pattern"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe up to open"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Press the unlock icon to open"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Unlocked by face. Press the unlock icon to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Unlocked by face. Press to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Face recognised. Press to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Face recognised. Press the unlock icon to open."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Move left"</item> <item msgid="5558598599408514296">"Move down"</item> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index 0915843e0127..2c9d49510f46 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmed"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tap Confirm to complete"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Unlocked by face. Press the unlock icon to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Unlocked by face. Press to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Face recognised. Press to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Face recognised. Press the unlock icon to continue."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authenticated"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Use PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Use pattern"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe up to open"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Press the unlock icon to open"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Unlocked by face. Press the unlock icon to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Unlocked by face. Press to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Face recognised. Press to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Face recognised. Press the unlock icon to open."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Move left"</item> <item msgid="5558598599408514296">"Move down"</item> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index f24456042647..7fde88cb6462 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmed"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tap Confirm to complete"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Unlocked by face. Press the unlock icon to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Unlocked by face. Press to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Face recognized. Press to continue."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Face recognized. Press the unlock icon to continue."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authenticated"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Use PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Use pattern"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe up to open"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Press the unlock icon to open"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Unlocked by face. Press the unlock icon to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Unlocked by face. Press to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Face recognized. Press to open."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Face recognized. Press the unlock icon to open."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Move left"</item> <item msgid="5558598599408514296">"Move down"</item> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 0caa430b19c4..d8b7401d2d39 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmado"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Presiona Confirmar para completar"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Desbloqueo con rostro. Presiona ícono desbl. para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Desbloqueo con rostro. Presiona para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Rostro reconocido. Presiona para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Rostro reconocido. Presiona el desbloqueo para continuar."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticado"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar patrón"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Desliza el dedo hacia arriba para abrir"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Presiona el ícono de desbloquear para abrir"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Desbloqueo con rostro. Presiona el ícono para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Desbloqueo con rostro. Presiona para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Rostro reconocido. Presiona para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Rostro reconocido. Presiona el desbloqueo para abrir."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Mover hacia la izquierda"</item> <item msgid="5558598599408514296">"Mover hacia abajo"</item> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index c75fa56e4291..7576da3d47c7 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmada"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toca Confirmar para completar la acción"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Desbloqueado con la cara. Toca el icono de desbloquear para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Desbloqueado con la cara. Pulsa para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Cara reconocida. Pulsa para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Cara reconocida. Pulsa el icono de desbloquear para continuar."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Se ha autenticado"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar patrón"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Desliza el dedo hacia arriba para abrir"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pulsa el icono desbloquear para abrir"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Desbloqueado con la cara. Toca el icono de desbloquear para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Desbloqueado con la cara. Pulsa para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Cara reconocida. Pulsa para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Cara reconocida. Pulsa el icono de desbloquear para abrir."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Mover hacia la izquierda"</item> <item msgid="5558598599408514296">"Mover hacia abajo"</item> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 46f9f518628c..efad53fdd33c 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Kinnitatud"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Lõpuleviimiseks puudutage nuppu Kinnita"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Avati näoga. Jätkamiseks vajutage avamise ikooni."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Avati näoga. Vajutage jätkamiseks."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Nägu tuvastati. Vajutage jätkamiseks."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Nägu tuvastati. Jätkamiseks vajutage avamise ikooni."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenditud"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Kasuta PIN-koodi"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Kasuta mustrit"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Pühkige avamiseks üles"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Avamiseks vajutage avamise ikooni"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Avati näoga. Avamiseks vajutage avamise ikooni."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Avati näoga. Avamiseks vajutage."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Nägu tuvastati. Avamiseks vajutage."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Nägu tuvastati. Avamiseks vajutage avamise ikooni."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Teisalda vasakule"</item> <item msgid="5558598599408514296">"Teisalda alla"</item> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index d6fa51409dea..a62e61321176 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Berretsita"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Amaitzeko, sakatu \"Berretsi\""</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Aurpegiaren bidez desblokeatu da. Aurrera egiteko, sakatu desblokeatzeko ikonoa."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Aurpegiaren bidez desblokeatu da. Sakatu aurrera egiteko."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Ezagutu da aurpegia. Sakatu aurrera egiteko."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Ezagutu da aurpegia. Aurrera egiteko, sakatu desblokeatzeko ikonoa."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentifikatuta"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Erabili PINa"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Erabili eredua"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Pasatu hatza gora irekitzeko"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Irekitzeko, sakatu desblokeatzeko ikonoa"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Aurpegiaren bidez desblokeatu da. Irekitzeko, sakatu desblokeatzeko ikonoa."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Aurpegiaren bidez desblokeatu da. Sakatu irekitzeko."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Ezagutu da aurpegia. Sakatu irekitzeko."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Ezagutu da aurpegia. Irekitzeko, sakatu desblokeatzeko ikonoa."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Eraman ezkerrera"</item> <item msgid="5558598599408514296">"Eraman behera"</item> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 60e7b47428d4..96fce4cf0315 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"تأیید شد"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"برای تکمیل، روی تأیید ضربه بزنید"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"قفلْ با چهره باز شد. برای ادامه، نماد قفلگشایی را فشار دهید."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"قفلْ با چهره باز شد. برای ادامه، فشار دهید."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"چهره شناسایی شد. برای ادامه، فشار دهید."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"چهره شناسایی شد. برای ادامه، نماد قفلگشایی را فشار دهید."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"راستیآزماییشده"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"استفاده از پین"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"استفاده از الگو"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"برای باز کردن، انگشتتان را تند بهبالا بکشید"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"برای باز کردن، نماد قفلگشایی را فشار دهید"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"قفلْ با چهره باز شد. برای باز کردن، نماد قفلگشایی را فشار دهید."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"قفلْ با چهره باز شد. برای باز کردن، فشار دهید."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"چهره شناسایی شد. برای باز کردن، فشار دهید."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"چهره شناسایی شد. برای باز کردن، نماد قفلگشایی را فشار دهید."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"انتقال بهچپ"</item> <item msgid="5558598599408514296">"انتقال بهپایین"</item> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index d1cdb9f0fb19..b395aac76a8d 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Vahvistettu"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Valitse lopuksi Vahvista"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Avattu kasvojen avulla. Jatka lukituksen avauskuvakkeella."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Avattu kasvojen avulla. Jatka painamalla."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Kasvot tunnistettu. Jatka painamalla."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Kasvot tunnistettu. Jatka lukituksen avauskuvakkeella."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Todennettu"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Käytä PIN-koodia"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Käytä kuviota"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Avaa pyyhkäisemällä ylös"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Jatka painamalla lukituksen avauskuvaketta."</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Avattu kasvojen avulla. Jatka lukituksen avauskuvakkeella."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Avattu kasvojen avulla. Avaa painamalla."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Kasvot tunnistettu. Avaa painamalla."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Kasvot tunnistettu. Jatka lukituksen avauskuvakkeella."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Siirrä vasemmalle"</item> <item msgid="5558598599408514296">"Siirrä alas"</item> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 69598089c416..7ded865dd46a 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmé"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Touchez Confirmer pour terminer"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Déverr. par reconn. faciale. App. sur l\'icône pour continuer."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Déverr. par reconnaissance faciale. Appuyez pour continuer."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Visage reconnu. Appuyez pour continuer."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Visage reconnu. Appuyez sur Déverrouiller pour continuer."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authentifié"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Utiliser un NIP"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Utiliser un schéma"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Balayez l\'écran vers le haut pour ouvrir"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Appuyez sur l\'icône Déverrouiller pour ouvrir"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Déverr. par reconn. faciale. App. sur l\'icône pour ouvrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Déverr. par reconnaissance faciale. Appuyez pour ouvrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Visage reconnu. Appuyez pour ouvrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Visage reconnu. Appuyez sur Déverrouiller pour ouvrir."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Déplacer vers la gauche"</item> <item msgid="5558598599408514296">"Déplacer vers le bas"</item> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 307d75d06279..14f7d06c34d1 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmé"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Appuyez sur \"Confirmer\" pour terminer"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Déverrouillage par visage. Appuyez sur l\'icône de déverrouillage pour continuer."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Déverrouillé par visage. Appuyez pour continuer."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Visage reconnu. Appuyez pour continuer."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Visage reconnu. Appuyez sur l\'icône de déverrouillage pour continuer."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authentifié"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Utiliser un code PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Utiliser un schéma"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Balayer vers le haut pour ouvrir"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Appuyez sur l\'icône de déverrouillage pour ouvrir"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Déverrouillé par visage. Appuyez sur icône déverrouillage pour ouvrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Déverrouillé par visage. Appuyez pour ouvrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Visage reconnu. Appuyez pour ouvrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Visage reconnu. Appuyez sur l\'icône de déverrouillage pour ouvrir."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Déplacer vers la gauche"</item> <item msgid="5558598599408514296">"Déplacer vers le bas"</item> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index e64891850f44..8e03b128b4fd 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmada"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toca Confirmar para completar o proceso"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Usouse o desbloqueo facial. Preme a icona de desbloquear."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Usouse o desbloqueo facial. Preme para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Recoñeceuse a cara. Preme para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Recoñeceuse a cara. Preme a icona de desbloquear."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticado"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar padrón"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Pasa o dedo cara arriba para abrir"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Preme a icona de desbloquear para abrir a porta"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Usouse o desbloqueo facial. Preme a icona de desbloquear."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Usouse o desbloqueo facial. Preme para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Recoñeceuse a cara. Preme para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Recoñeceuse a cara. Preme a icona de desbloquear para abrir."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Mover cara á esquerda"</item> <item msgid="5558598599408514296">"Mover cara abaixo"</item> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index ecdccde5ca3f..e84c8550d207 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"પુષ્ટિ કરી"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"પરીક્ષણ પૂર્ણ કરવા કન્ફર્મ કરોને ટૅપ કરો"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ચહેરા દ્વારા અનલૉક કર્યું. આગળ વધવા \'અનલૉક કરો\' આઇકન દબાવો."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ચહેરા દ્વારા અનલૉક કર્યું. આગળ વધવા માટે દબાવો."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ચહેરો ઓળખ્યો. આગળ વધવા માટે દબાવો."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ચહેરો ઓળખ્યો. આગળ વધવા \'અનલૉક કરો\' આઇકન દબાવો."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"પ્રમાણિત"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"પિનનો ઉપયોગ કરો"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"પૅટર્નનો ઉપયોગ કરો"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"ખોલવા માટે ઉપરની તરફ સ્વાઇપ કરો"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"ખોલવા માટે \'અનલૉક કરો\' આઇકન દબાવો"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ચહેરા દ્વારા અનલૉક કર્યું. ખોલવા \'અનલૉક કરો\' આઇકન દબાવો."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ચહેરા દ્વારા અનલૉક કર્યું. ખોલવા માટે દબાવો."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ચહેરો ઓળખ્યો. ખોલવા માટે દબાવો."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"ચહેરો ઓળખ્યો. ખોલવા માટે \'અનલૉક કરો\' આઇકન દબાવો."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"ડાબે ખસેડો"</item> <item msgid="5558598599408514296">"નીચે ખસેડો"</item> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index d862adce3daf..85f2adfcc6ea 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"पुष्टि हो गई"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"\'पुष्टि करें\' पर टैप करके पूरा करें"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"चेहरे से अनलॉक किया. जारी रखने के लिए, अनलॉक आइकॉन को दबाएं."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"चेहरे से अनलॉक किया गया. जारी रखने के लिए टैप करें."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"चेहरे की पहचान हो गई. जारी रखने के लिए टैप करें."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"चेहरे की पहचान हो गई. जारी रखने के लिए अनलॉक आइकॉन को टैप करें."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"पुष्टि हो गई"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"पिन इस्तेमाल करें"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"पैटर्न इस्तेमाल करें"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"खोलने के लिए ऊपर स्वाइप करें"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"डिवाइस अनलॉक करने के लिए, अनलॉक आइकॉन को दबाएं"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"चेहरे से अनलॉक किया. डिवाइस अनलॉक करने के लिए, अनलॉक आइकॉन को दबाएं."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"चेहरे से अनलॉक किया गया. डिवाइस खोलने के लिए टैप करें."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"चेहरे की पहचान हो गई. डिवाइस खोलने के लिए टैप करें."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"चेहरे की पहचान हो गई. डिवाइस खोलने के लिए अनलॉक आइकॉन को टैप करें."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"बाईं ओर ले जाएं"</item> <item msgid="5558598599408514296">"नीचे ले जाएं"</item> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index e34a08e624af..1ddf76775762 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potvrđeno"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Dodirnite Potvrdi za dovršetak"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Otključano pomoću lica. Pritisnite ikonu otključavanja da biste nastavili."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Otključano pomoću lica. Pritisnite da biste nastavili."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Lice je prepoznato. Pritisnite da biste nastavili."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Lice je prepoznato. Pritisnite ikonu otključavanja da biste nastavili."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentičnost provjerena"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Koristite PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Koristite uzorak"</string> @@ -315,6 +318,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Prijeđite prstom prema gore da biste otvorili"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pritisnite ikonu otključavanja da biste otvorili"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Otključano pomoću lica. Pritisnite ikonu otključavanja da biste otvorili."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Otključano pomoću lica. Pritisnite da biste otvorili."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Lice je prepoznato. Pritisnite da biste otvorili."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Lice je prepoznato. Pritisnite ikonu otključavanja da biste otvorili."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Pomicanje ulijevo"</item> <item msgid="5558598599408514296">"Pomicanje prema dolje"</item> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 271b1ebecb3c..531fcf06d405 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Megerősítve"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Koppintson a Megerősítés lehetőségre"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Arccal feloldva. A folytatáshoz nyomja meg a feloldás ikont."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Zárolás arccal feloldva. Koppintson a folytatáshoz."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Arc felismerve. Koppintson a folytatáshoz."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Arc felismerve. A folytatáshoz koppintson a Feloldásra."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Hitelesítve"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN-kód használata"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Minta használata"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Csúsztasson felfelé a megnyitáshoz"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Az eszköz használatához nyomja meg a feloldás ikonját"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Arccal feloldva. A megnyitáshoz nyomja meg a feloldás ikont."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Zárolás arccal feloldva. Koppintson az eszköz használatához."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Arc felismerve. Koppintson az eszköz használatához."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Arc felismerve. Eszköz használata: Feloldás ikon."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Mozgatás balra"</item> <item msgid="5558598599408514296">"Mozgatás lefelé"</item> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 56aa83ab840c..7f2d5778bcbb 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Հաստատվեց"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Ավարտելու համար հպեք «Հաստատել»"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Ապակողպվել է դեմքով։ Սեղմեք ապակողպման պատկերակը։"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Ապակողպվել է դեմքով։ Սեղմեք շարունակելու համար։"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Դեմքը ճանաչվեց։ Սեղմեք շարունակելու համար։"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Դեմքը ճանաչվեց։ Սեղմեք ապակողպման պատկերակը։"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Նույնականացված է"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Օգտագործել PIN կոդ"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Օգտագործել նախշ"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Բացելու համար սահեցրեք վերև"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Բացեք՝ սեղմելով ապակողպման պատկերակը"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Ապակողպվել է դեմքով։ Բացեք՝ սեղմելով ապակողպման պատկերակը։"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Ապակողպվել է դեմքով։ Սեղմեք բացելու համար։"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Դեմքը ճանաչվեց։ Սեղմեք բացելու համար։"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Դեմքը ճանաչվեց։ Բացելու համար սեղմեք ապակողպման պատկերակը։"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Տեղափոխել ձախ"</item> <item msgid="5558598599408514296">"Տեղափոխել ներքև"</item> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 30f7b526093d..d8ab63b18058 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Dikonfirmasi"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Ketuk Konfirmasi untuk menyelesaikan"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Kunci dibuka dengan wajah. Tekan ikon buka kunci untuk melanjutkan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Kunci dibuka dengan wajah. Tekan untuk melanjutkan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Wajah dikenali. Tekan untuk melanjutkan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Wajah dikenali. Tekan ikon buka kunci untuk melanjutkan."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Diautentikasi"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Gunakan PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Gunakan pola"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Geser ke atas untuk membuka"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Tekan ikon buka kunci untuk membuka"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Kunci dibuka dengan wajah. Tekan ikon buka kunci untuk membuka."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Kunci dibuka dengan wajah. Tekan untuk membuka."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Wajah dikenali. Tekan untuk membuka."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Wajah dikenali. Tekan ikon buka kunci untuk membuka."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Pindah ke kiri"</item> <item msgid="5558598599408514296">"Pindah ke bawah"</item> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index c786d0d79c06..387bdd7fbad5 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Staðfest"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Ýttu á „Staðfesta“ til að ljúka"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Opnað með andliti. Ýttu á táknið taka úr lás til að halda áfram."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Opnað með andliti. Ýttu til að halda áfram."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Andlitið var greint. Ýttu til að halda áfram."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Andlitið var greint. Ýttu á opnunartáknið til að halda áfr."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Auðkennt"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Nota PIN-númer"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Nota mynstur"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Strjúktu upp til að opna"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Ýttu á táknið til að taka úr lás til að opna"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Opnað með andliti. Ýttu á táknið taka úr lás til að opna."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Opnað með andliti. Ýttu til að opna."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Andlitið var greint. Ýttu til að opna."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Andlitið var greint. Ýttu á opnunartáknið til að opna."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Færa til vinstri"</item> <item msgid="5558598599408514296">"Færa niður"</item> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index fff7abe0ea2c..f3ff5efe0e06 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confermato"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tocca Conferma per completare"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Sbloccato con il volto. Premi l\'icona Sblocca e continua."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Sbloccato con il volto. Premi per continuare."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Volto riconosciuto. Premi per continuare."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Volto riconosciuto. Premi l\'icona Sblocca e continua."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticazione eseguita"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Utilizza PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usa sequenza"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Scorri verso l\'alto per aprire"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Premi l\'icona Sblocca per aprire"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Sbloccato con il volto. Premi l\'icona Sblocca per aprire."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Sbloccato con il volto. Premi per aprire."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Volto riconosciuto. Premi per aprire."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Volto riconosciuto. Premi l\'icona Sblocca per aprire."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Sposta a sinistra"</item> <item msgid="5558598599408514296">"Sposta giù"</item> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 56fb50e6ad6b..2fd8c2f87e1c 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"יש אישור"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"יש להקיש על \'אישור\' לסיום התהליך"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"הנעילה בוטלה בזיהוי פנים. להמשך, לוחצים על סמל ביטול הנעילה."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"הנעילה בוטלה באמצעות זיהוי הפנים. יש ללחוץ כדי להמשיך."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"הפנים זוהו. יש ללחוץ כדי להמשיך."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"הפנים זוהו. להמשך יש ללחוץ על סמל ביטול הנעילה."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"מאומת"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"שימוש בקוד אימות"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"שימוש בקו ביטול נעילה"</string> @@ -317,6 +320,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"צריך להחליק כדי לפתוח"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"לפתיחה, לוחצים על סמל ביטול הנעילה"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"הנעילה בוטלה בזיהוי פנים. פותחים בלחיצה על סמל ביטול הנעילה."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"הנעילה בוטלה באמצעות זיהוי הפנים. יש ללחוץ כדי לפתוח."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"הפנים זוהו. יש ללחוץ כדי לפתוח."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"הפנים זוהו. יש ללחוץ על סמל ביטול הנעילה כדי לפתוח."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"הזזה שמאלה"</item> <item msgid="5558598599408514296">"הזזה למטה"</item> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index d4ea688d26ed..b64afe8bce07 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"確認しました"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"完了するには [確認] をタップしてください"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"顔でロック解除しました。アイコンを押すと続行します。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"顔でロック解除しました。押して続行してください。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"顔を認識しました。押して続行してください。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"顔を認識しました。ロック解除アイコンを押して続行します。"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"認証済み"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN を使用"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"パターンを使用"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"開くには上にスワイプします"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"ロック解除アイコンを押して開きます"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"顔でロック解除しました。アイコンを押すと開きます。"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"顔でロック解除しました。押すと開きます。"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"顔を認識しました。押すと開きます。"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"顔を認識しました。ロック解除アイコンを押して開きます。"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"左に移動"</item> <item msgid="5558598599408514296">"下に移動"</item> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 30e92b716dd4..9ad4aa5df1da 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"დადასტურებული"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"დასასრულებლად შეეხეთ „დადასტურებას“"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"განიბლოკა სახით. გასაგრძელებლად დააჭირეთ განბლოკვის ხატულას."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"განიბლოკა სახით. დააჭირეთ გასაგრძელებლად."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ამოცნობილია სახით. დააჭირეთ გასაგრძელებლად."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ამოცნობილია სახით. გასაგრძელებლად დააჭირეთ განბლოკვის ხატულას."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ავტორიზებულია"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN-კოდის გამოყენება"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ნიმუშის გამოყენება"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"გასახსნელად გადაფურცლეთ ზემოთ"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"გასახსნელად დააჭირეთ განბლოკვის ხატულას"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"განიბლოკა სახით. გასახსნელად დააჭირეთ განბლოკვის ხატულას."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"განიბლოკა სახით. დააჭირეთ გასახსნელად."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ამოცნობილია სახით. დააჭირეთ გასახსნელად."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"ამოცნობილია სახით. გასახსნელად დააჭირეთ განბლოკვის ხატულას."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"მარცხნივ გადატანა"</item> <item msgid="5558598599408514296">"ქვემოთ გადატანა"</item> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index a234570783c8..875965d1ec27 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Расталды"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Аяқтау үшін \"Растау\" түймесін түртіңіз."</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Бет үлгісі арқылы ашылды. Жалғастыру үшін құлыпты ашу белгішесін басыңыз."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Бетпен ашылды. Жалғастыру үшін басыңыз."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Бет танылды. Жалғастыру үшін басыңыз."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Бет танылды. Жалғастыру үшін құлыпты ашу белгішесін басыңыз."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Аутентификацияланған"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN кодын пайдалану"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Өрнекті пайдалану"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Ашу үшін жоғары қарай сырғытыңыз."</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Ашу үшін құлыпты ашу белгішесін басыңыз."</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Бет үлгісі арқылы ашылды. Ашу үшін құлыпты ашу белгішесін басыңыз."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Бетпен ашылды. Ашу үшін басыңыз."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Бет танылды. Ашу үшін басыңыз."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Бет танылды. Ашу үшін құлыпты ашу белгішесін басыңыз."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Солға жылжыту"</item> <item msgid="5558598599408514296">"Төмен жылжыту"</item> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 32b274fb560e..4001a1be56f9 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"បានបញ្ជាក់"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ចុច \"បញ្ជាក់\" ដើម្បីបញ្ចប់"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"បានដោះសោដោយប្រើមុខ។ សូមចុចរូបដោះសោ ដើម្បីបន្ត។"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"បានដោះសោដោយប្រើមុខ។ សូមចុច ដើម្បីបន្ត។"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"បានស្គាល់មុខ។ សូមចុច ដើម្បីបន្ត។"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"បានស្គាល់មុខ។ សូមចុចរូបដោះសោ ដើម្បីបន្ត។"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"បានផ្ទៀងផ្ទាត់"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ប្រើកូដ PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ប្រើលំនាំ"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"អូសឡើងលើដើម្បីបើក"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"ចុចរូបដោះសោ ដើម្បីបើក"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"បានដោះសោដោយប្រើមុខ។ សូមចុចរូបដោះសោ ដើម្បីបើក។"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"បានដោះសោដោយប្រើមុខ។ សូមចុច ដើម្បីបើក។"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"បានស្គាល់មុខ។ សូមចុច ដើម្បីបើក។"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"បានស្គាល់មុខ។ សូមចុចរូបដោះសោ ដើម្បីបើក។"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"ផ្លាស់ទីទៅឆ្វេង"</item> <item msgid="5558598599408514296">"ផ្លាស់ទីចុះក្រោម"</item> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 8198d7f7bc99..ca543425f9af 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ದೃಢೀಕರಿಸಲಾಗಿದೆ"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ಪೂರ್ಣಗೊಳಿಸಲು ದೃಢೀಕರಿಸಿ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ಮುಖವನ್ನು ಬಳಸಿ ಅನ್ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದುವರಿಯಲು ಅನ್ಲಾಕ್ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿ."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ಮುಖವನ್ನು ಬಳಸಿ ಅನ್ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದುವರಿಯಲು ಒತ್ತಿ."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ಮುಖ ಗುರುತಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಯಲು ಒತ್ತಿ."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ಮುಖ ಗುರುತಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಯಲು ಅನ್ಲಾಕ್ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿ."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ದೃಢೀಕರಿಸಲಾಗಿದೆ"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ಪಿನ್ ಬಳಸಿ"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ಪ್ಯಾಟರ್ನ್ ಬಳಸಿ"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"ತೆರೆಯಲು ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"ತೆರೆಯಲು ಅನ್ಲಾಕ್ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿ"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ಮುಖವನ್ನು ಬಳಸಿ ಅನ್ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ತೆರೆಯಲು ಅನ್ಲಾಕ್ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿ."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ಮುಖವನ್ನು ಬಳಸಿ ಅನ್ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ತೆರೆಯಲು ಒತ್ತಿ."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ಮುಖ ಗುರುತಿಸಲಾಗಿದೆ. ತೆರೆಯಲು ಒತ್ತಿ."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"ಮುಖ ಗುರುತಿಸಲಾಗಿದೆ. ತೆರೆಯಲು ಅನ್ಲಾಕ್ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿ."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"ಎಡಕ್ಕೆ ಸರಿಸಿ"</item> <item msgid="5558598599408514296">"ಕೆಳಗೆ ಸರಿಸಿ"</item> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 2591498e459c..6cb1943912c0 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"확인함"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"완료하려면 확인을 탭하세요."</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"얼굴 인식으로 잠금 해제되었습니다. 계속하려면 잠금 해제 아이콘을 누르세요."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"얼굴 인식으로 잠금 해제되었습니다. 계속하려면 누르세요."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"얼굴이 인식되었습니다. 계속하려면 누르세요."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"얼굴이 인식되었습니다. 계속하려면 아이콘을 누르세요."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"인증됨"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN 사용"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"패턴 사용"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"위로 스와이프하여 열기"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"기기를 열려면 잠금 해제 아이콘을 누르세요."</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"얼굴 인식으로 잠금 해제되었습니다. 기기를 열려면 잠금 해제 아이콘을 누르세요."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"얼굴 인식으로 잠금 해제되었습니다. 열려면 누르세요."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"얼굴이 인식되었습니다. 열려면 누르세요."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"얼굴이 인식되었습니다. 열려면 잠금 해제 아이콘을 누르세요."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"왼쪽으로 이동"</item> <item msgid="5558598599408514296">"아래로 이동"</item> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 46d387c36191..17051c92b8c2 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Ырасталды"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Бүтүрүү үчүн \"Ырастоо\" баскычын басыңыз"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Кулпуну жүзүңүз менен ачтыңыз. Улантуу үчүн кулпусун ачуу сүрөтчөсүн басыңыз."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Кулпуну жүзүңүз менен ачтыңыз. Улантуу үчүн басыңыз."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Жүз таанылды. Улантуу үчүн басыңыз."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Жүз таанылды. Улантуу үчүн кулпусун ачуу сүрөтчөсүн басыңыз."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Аныктыгы текшерилди"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN кодду колдонуу"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Графикалык ачкычты колдонуу"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Ачуу үчүн өйдө сүрүңүз"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Кулпуну ачуу сүрөтчөсүн басыңыз"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Кулпуну жүзүңүз менен ачтыңыз. Эми кулпуну ачуу сүрөтчөсүн басыңыз."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Кулпуну жүзүңүз менен ачтыңыз. Ачуу үчүн басыңыз."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Жүз таанылды. Ачуу үчүн басыңыз."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Жүз таанылды. Эми кулпуну ачуу сүрөтчөсүн басыңыз."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Солго жылдыруу"</item> <item msgid="5558598599408514296">"Төмөн жылдыруу"</item> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index cb86e04c2100..87ed4087f852 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ຢືນຢັນແລ້ວ"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ແຕະຢືນຢັນເພື່ອສຳເລັດ"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ປົດລັອກດ້ວຍໜ້າແລ້ວ. ກົດໄອຄອນປົດລັອກເພື່ອສືບຕໍ່."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ປົດລັອກດ້ວຍໜ້າແລ້ວ. ກົດເພື່ອສືບຕໍ່."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ຈຳແນກໜ້າໄດ້ແລ້ວ. ກົດເພື່ອສືບຕໍ່."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ຈຳແນກໜ້າໄດ້ແລ້ວ. ກົດໄອຄອນປົດລັອກເພື່ອສືບຕໍ່."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ຮັບຮອງຄວາມຖືກຕ້ອງແລ້ວ"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ໃຊ້ PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ໃຊ້ຮູບແບບ"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"ປັດຂຶ້ນເພື່ອເປີດ"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"ກົດໄອຄອນປົດລັອກເພື່ອເປີດ"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ປົດລັອກດ້ວຍໜ້າແລ້ວ. ກົດໄອຄອນປົດລັອກເພື່ອເປີດ."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ປົດລັອກດ້ວຍໜ້າແລ້ວ. ກົດເພື່ອເປີດ."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ຈຳແນກໜ້າໄດ້ແລ້ວ. ກົດເພື່ອເປີດ."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"ຈຳແນກໜ້າໄດ້ແລ້ວ. ກົດໄອຄອນປົດລັອກເພື່ອເປີດ."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"ຍ້າຍໄປຊ້າຍ"</item> <item msgid="5558598599408514296">"ຍ້າຍລົງ"</item> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 0df0af28b03d..c9aa65c0c999 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Patvirtinta"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Paliesk. „Patvirtinti“, kad užbaigtumėte"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Atrakinta pagal veidą. Pasp. atrak. pikt., kad tęstumėte."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Atrakinta pagal veidą. Paspauskite, jei norite tęsti."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Veidas atpažintas. Paspauskite, jei norite tęsti."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Veidas atpažintas. Tęskite paspaudę atrakinimo piktogramą."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentifikuota"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Naudoti PIN kodą"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Naudoti atrakinimo piešinį"</string> @@ -317,6 +320,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Perbraukite aukštyn, kad atidarytumėte"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Paspauskite atrakinimo piktogramą, kad atidarytumėte"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Atrakinta pagal veidą. Pasp. atr. pikt., kad atidarytumėte."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Atrakinta pagal veidą. Paspauskite, kad atidarytumėte."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Veidas atpažintas. Paspauskite, kad atidarytumėte."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Veidas atpažintas. Atidarykite paspaudę atrakin. piktogramą."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Perkelti kairėn"</item> <item msgid="5558598599408514296">"Perkelti žemyn"</item> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index a2490d6c0bf4..7c1e658da448 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Apstiprināts"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Lai pabeigtu, pieskarieties Apstiprināt"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Atbloķēta ar seju. Turpināt: nospiediet atbloķēšanas ikonu."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Ierīce atbloķēta ar seju. Nospiediet, lai turpinātu."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Seja atpazīta. Nospiediet, lai turpinātu."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Seja atpazīta. Lai turpinātu, nospiediet atbloķēšanas ikonu."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentifikācija veikta"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Izmantot PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Izmantot kombināciju"</string> @@ -315,6 +318,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Velciet augšup, lai atvērtu"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Lai atvērtu, nospiediet atbloķēšanas ikonu"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Atbloķēta ar seju. Atvērt: nospiediet atbloķēšanas ikonu."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Ierīce atbloķēta ar seju. Nospiediet, lai atvērtu."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Seja atpazīta. Nospiediet, lai atvērtu."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Seja atpazīta. Lai atvērtu, nospiediet atbloķēšanas ikonu."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Pārvietojiet pirkstu pa kreisi"</item> <item msgid="5558598599408514296">"Pārvietojiet pirkstu lejup"</item> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index a5afc6031f0a..8624604c8f5b 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Потврдено"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Допрете „Потврди“ за да се заврши"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Отклучено со лик. Притиснете ја иконата за отклучување за да продолжите."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Отклучено со лик. Притиснете за да продолжите."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Лицето е препознаено. Притиснете за да продолжите."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Лицето е препознаено. Притиснете ја иконата за отклучување за да продолжите."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Проверена"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Користи PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Користи шема"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Повлечете за да отворите"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Притиснете ја иконата за отклучување за да отворите"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Отклучено со лик. Притиснете ја иконата за отклучување за да отворите."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Отклучено со лик. Притиснете за да отворите."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Лицето е препознаено. Притиснете за да отворите."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Лицето е препознаено. Притиснете ја иконата за отклучување за да отворите."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Премести налево"</item> <item msgid="5558598599408514296">"Премести надолу"</item> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 97960e8f3588..85c420a3e6b6 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"സ്ഥിരീകരിച്ചു"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"പൂർത്തിയാക്കാൻ സ്ഥിരീകരിക്കുക ടാപ്പ് ചെയ്യൂ"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്തു. തുടരാൻ അൺലോക്ക് ഐക്കൺ അമർത്തുക."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്തു. തുടരാൻ അമർത്തുക."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"മുഖം തിരിച്ചറിഞ്ഞു. തുടരാൻ അമർത്തുക."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"മുഖം തിരിച്ചറിഞ്ഞു. തുടരാൻ അൺലോക്ക് ഐക്കൺ അമർത്തുക."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"പരിശോധിച്ചുറപ്പിച്ചു"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"പിൻ ഉപയോഗിക്കുക"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"പാറ്റേൺ ഉപയോഗിക്കുക"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"തുറക്കാൻ മുകളിലോട്ട് സ്വൈപ്പ് ചെയ്യുക"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"തുറക്കാൻ അൺലോക്ക് ഐക്കൺ അമർത്തുക"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്തു. തുറക്കാൻ അൺലോക്ക് ഐക്കൺ അമർത്തുക."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്തു. തുറക്കാൻ അമർത്തുക."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"മുഖം തിരിച്ചറിഞ്ഞു. തുറക്കാൻ അമർത്തുക."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"മുഖം തിരിച്ചറിഞ്ഞു. തുറക്കാൻ അൺലോക്ക് ഐക്കൺ അമർത്തുക."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"ഇടത്തേക്ക് നീക്കുക"</item> <item msgid="5558598599408514296">"താഴേക്ക് നീക്കുക"</item> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 99913ca83ce5..aa1a6a019e36 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Баталгаажсан"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Дуусгахын тулд баталгаажуулахыг товших"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Царайгаар түгжээг тайлсан. Үргэлжлүүлэхийн тулд түгжээг тайлах дүрс тэмдэг дээр дараарай."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Царайгаар түгжээг тайлсан. Үргэлжлүүлэхийн тулд дарна уу."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Царайг таньсан. Үргэлжлүүлэхийн тулд дарна уу."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Царайг таньсан. Үргэлжлүүлэх бол түгжээг тайлах дүрсийг дар."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Баталгаажуулагдсан"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ПИН ашиглах"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Хээ ашиглах"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Нээхийн тулд дээш шударна уу"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Нээхийн тулд түгжээг тайлах дүрс тэмдэг дээр дараарай"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Царайгаар түгжээг тайлсан. Нээхийн тулд түгжээг тайлах дүрс тэмдэг дээр дараарай."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Царайгаар түгжээг тайлсан. Нээхийн тулд дарна уу."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Царайг таньсан. Нээхийн тулд дарна уу."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Царайг таньсан. Нээх бол түгжээг тайлах дүрсийг дарна уу."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Зүүн тийш зөөх"</item> <item msgid="5558598599408514296">"Доош зөөх"</item> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index 188f0b7abaa1..a4036433bf84 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"निश्चित केले"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"पूर्ण करण्यासाठी खात्री करा वर टॅप करा"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"चेहऱ्याने अनलॉक केले. सुरू ठेवण्यासाठी अनलॉक करा आयकन दाबा."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"चेहऱ्याने अनलॉक केले आहे. पुढे सुरू ठेवण्यासाठी दाबा."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"चेहरा ओळखला आहे. पुढे सुरू ठेवण्यासाठी दाबा."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"चेहरा ओळखला आहे. पुढे सुरू ठेवण्यासाठी अनलॉक करा आयकन दाबा."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ऑथेंटिकेशन केलेले"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"पिन वापरा"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"पॅटर्न वापरा"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"उघडण्यासाठी वर स्वाइप करा"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"उघडण्यासाठी अनलॉक करा आयकन दाबा"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"चेहऱ्याने अनलॉक केले. उघडण्यासाठी अनलॉक करा आयकन दाबा."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"चेहऱ्याने अनलॉक केले आहे. उघडण्यासाठी दाबा."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"चेहरा ओळखला आहे. उघडण्यासाठी दाबा."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"चेहरा ओळखला आहे. उघडण्यासाठी अनलॉक करा आयकन दाबा."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"डावीकडे हलवा"</item> <item msgid="5558598599408514296">"खाली हलवा"</item> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index 894c2e903c6c..db64dd05e3b8 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Disahkan"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Ketik Sahkan untuk menyelesaikan"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Dibuka kunci dengan wajah. Tekan ikon buka kunci untuk teruskan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Dibuka kunci dengan wajah. Tekan untuk meneruskan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Wajah dicam. Tekan untuk meneruskan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Wajah dicam. Tekan ikon buka kunci untuk meneruskan."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Disahkan"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Gunakan PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Gunakan corak"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Leret ke atas untuk buka"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Tekan ikon buka kunci untuk buka"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Dibuka kunci dengan wajah. Tekan ikon buka kunci untuk buka."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Dibuka kunci dengan wajah. Tekan untuk membuka."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Wajah dicam. Tekan untuk membuka."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Wajah dicam. Tekan ikon buka kunci untuk membuka."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Alih ke kiri"</item> <item msgid="5558598599408514296">"Alih ke bawah"</item> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 6d974000f3ae..d0428150ed17 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"အတည်ပြုပြီးပြီ"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"အပြီးသတ်ရန်အတွက် \'အတည်ပြုရန်\' ကို တို့ပါ"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"မျက်နှာပြ လော့ခ်ဖွင့်ထားသည်။ လော့ခ်ဖွင့်သင်္ကေတနှိပ်၍ ရှေ့ဆက်ပါ။"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"မျက်နှာဖြင့် ဖွင့်ထားသည်။ ရှေ့ဆက်ရန် နှိပ်ပါ။"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"မျက်နှာ မှတ်မိသည်။ ရှေ့ဆက်ရန် နှိပ်ပါ။"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"မျက်နှာ မှတ်မိသည်။ ရှေ့ဆက်ရန် လော့ခ်ဖွင့်သင်္ကေတကို နှိပ်ပါ။"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"အထောက်အထားစိစစ်ပြီးပြီ"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ပင်နံပါတ်သုံးရန်"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ပုံစံကို သုံးရန်"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"ဖွင့်ရန် အပေါ်သို့ပွတ်ဆွဲပါ"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"ဖွင့်ရန် လော့ခ်ဖွင့်သင်္ကေတကို နှိပ်ပါ"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"မျက်နှာပြ လော့ခ်ဖွင့်ထားသည်။ လော့ခ်ဖွင့်သင်္ကေတ နှိပ်၍ဝင်ပါ။"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"မျက်နှာဖြင့် ဖွင့်ထားသည်။ ဖွင့်ရန် နှိပ်ပါ။"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"မျက်နှာ မှတ်မိသည်။ ဖွင့်ရန် နှိပ်ပါ။"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"မျက်နှာ မှတ်မိသည်။ ဖွင့်ရန် လော့ခ်ဖွင့်သင်္ကေတကို နှိပ်ပါ။"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"ဘယ်ဘက်သို့ရွှေ့ရန်"</item> <item msgid="5558598599408514296">"အောက်သို့ရွှေ့ရန်"</item> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 13ffdd88870e..65286eab1c4f 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bekreftet"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Trykk på Bekreft for å fullføre"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Låst opp med ansiktet. Trykk på lås opp-ikonet for å fortsette"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Låst opp med ansiktet. Trykk for å fortsette."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Ansiktet er gjenkjent. Trykk for å fortsette."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Ansiktet er gjenkjent. Trykk på lås opp-ikon for å fortsette"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentisert"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Bruk PIN-kode"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Bruk mønster"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Sveip opp for å åpne"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Trykk på lås opp-ikonet for å åpne"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Låst opp med ansiktet. Trykk på lås opp-ikonet for å fortsette"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Låst opp med ansiktet. Trykk for å åpne."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Ansiktet er gjenkjent. Trykk for å åpne."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Ansiktet er gjenkjent. Trykk på lås opp-ikon for å fortsette"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Flytt til venstre"</item> <item msgid="5558598599408514296">"Flytt ned"</item> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index a18cae414c8c..896a4f4785e0 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"पुष्टि भयो"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"पूरा गर्नका लागि पुष्टि गर्नुहोस् नामक विकल्पमा ट्याप गर्नुहोस्"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"अनुहार प्रयोग गरी अनलक गरियो। जारी राख्न अनलक आइकनमा थिच्नुहोस्।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"अनुहार प्रयोग गरी अनलक गरियो। जारी राख्न थिच्नुहोस्।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"अनुहार पहिचान गरियो। जारी राख्न थिच्नुहोस्।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"अनुहार पहिचान गरियो। जारी राख्न अनलक आइकनमा थिच्नुहोस्।"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"प्रमाणीकरण गरियो"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN प्रयोग गर्नुहोस्"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ढाँचा प्रयोग गर्नुहोस्"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"खोल्न माथितिर स्वाइप गर्नुहोस्"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"खोल्न अनलक आइकनमा थिच्नुहोस्"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"अनुहार प्रयोग गरी अनलक गरियो। खोल्न अनलक आइकनमा थिच्नुहोस्।"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"अनुहार प्रयोग गरी अनलक गरियो। डिभाइस खोल्न थिच्नुहोस्।"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"अनुहार पहिचान गरियो। डिभाइस खोल्न थिच्नुहोस्।"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"अनुहार पहिचान गरियो। डिभाइस खोल्न अनलक आइकनमा थिच्नुहोस्।"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"बायाँ सार्नुहोस्"</item> <item msgid="5558598599408514296">"तल सार्नुहोस्"</item> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 48fc30f5378e..b36fc2de0202 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bevestigd"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tik op Bevestigen om te voltooien"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Ontgrendeld via gezicht. Druk op het ontgrendelicoon."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Ontgrendeld via gezicht. Druk om door te gaan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Gezicht herkend. Druk om door te gaan."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Gezicht herkend. Druk op het ontgrendelicoon."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Geverifieerd"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Pincode gebruiken"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Patroon gebruiken"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe omhoog om te openen"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Druk op het ontgrendelicoon om te openen"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Ontgrendeld via gezicht. Druk op het ontgrendelicoon."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Ontgrendeld via gezicht. Druk om te openen."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Gezicht herkend. Druk om te openen."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Gezicht herkend. Druk op het ontgrendelicoon."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Naar links verplaatsen"</item> <item msgid="5558598599408514296">"Omlaag verplaatsen"</item> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index b62d04199bc8..bef3a899cddf 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ସୁନିଶ୍ଚିତ କରାଯାଇଛି"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ସମ୍ପୂର୍ଣ୍ଣ କରିବାକୁ ସୁନିଶ୍ଚିତ କରନ୍ତୁରେ ଟାପ୍ କରନ୍ତୁ"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ ଅନଲକ ଆଇକନ ଦବାନ୍ତୁ।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ ଦବାନ୍ତୁ।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ଫେସ ଚିହ୍ନଟ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ ଦବାନ୍ତୁ।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ଫେସ ଚିହ୍ନଟ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ ଅନଲକ ଆଇକନ ଦବାନ୍ତୁ।"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ପ୍ରାମାଣିକତା ହୋଇଛି"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN ବ୍ୟବହାର କରନ୍ତୁ"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ପାଟର୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"ଖୋଲିବା ପାଇଁ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"ଖୋଲିବାକୁ ଅନଲକ ଆଇକନ ଦବାନ୍ତୁ"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି। ଖୋଲିବାକୁ ଅନଲକ ଆଇକନ ଦବାନ୍ତୁ।"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି। ଖୋଲିବାକୁ ଦବାନ୍ତୁ।"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ଫେସ ଚିହ୍ନଟ କରାଯାଇଛି। ଖୋଲିବାକୁ ଦବାନ୍ତୁ।"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"ଫେସ ଚିହ୍ନଟ କରାଯାଇଛି। ଖୋଲିବାକୁ ଅନଲକ ଆଇକନ ଦବାନ୍ତୁ।"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"ବାମକୁ ମୁଭ କରନ୍ତୁ"</item> <item msgid="5558598599408514296">"ତଳକୁ ମୁଭ କରନ୍ତୁ"</item> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index dd6070661c0a..1e5cda32cbba 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ਪੁਸ਼ਟੀ ਕੀਤੀ ਗਈ"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ਪੂਰਾ ਕਰਨ ਲਈ ਪੁਸ਼ਟੀ ਕਰੋ \'ਤੇ ਟੈਪ ਕਰੋ"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ। ਜਾਰੀ ਰੱਖਣ ਲਈ \'ਅਣਲਾਕ ਕਰੋ\' ਪ੍ਰਤੀਕ ਨੂੰ ਦਬਾਓ।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਦਬਾਓ।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਹੋਈ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਦਬਾਓ।"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਹੋਈ। ਜਾਰੀ ਰੱਖਣ ਲਈ \'ਅਣਲਾਕ ਕਰੋ\' ਪ੍ਰਤੀਕ ਨੂੰ ਦਬਾਓ।"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ਪ੍ਰਮਾਣਿਤ ਹੋਇਆ"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ਪਿੰਨ ਵਰਤੋ"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ਪੈਟਰਨ ਵਰਤੋ"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"ਖੋਲ੍ਹਣ ਲਈ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"ਖੋਲ੍ਹਣ ਲਈ \'ਅਣਲਾਕ ਕਰੋ\' ਪ੍ਰਤੀਕ ਨੂੰ ਦਬਾਓ"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ। ਖੋਲ੍ਹਣ ਲਈ \'ਅਣਲਾਕ ਕਰੋ\' ਪ੍ਰਤੀਕ ਨੂੰ ਦਬਾਓ।"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ। ਖੋਲ੍ਹਣ ਲਈ ਦਬਾਓ।"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਹੋਈ। ਖੋਲ੍ਹਣ ਲਈ ਦਬਾਓ।"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਹੋਈ। ਖੋਲ੍ਹਣ ਲਈ \'ਅਣਲਾਕ ਕਰੋ\' ਪ੍ਰਤੀਕ ਨੂੰ ਦਬਾਓ।"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"ਖੱਬੇ ਲਿਜਾਓ"</item> <item msgid="5558598599408514296">"ਹੇਠਾਂ ਲਿਜਾਓ"</item> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 66e5c1713740..99965408aaf7 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potwierdzono"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Aby zakończyć, kliknij Potwierdź"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Odblokowano skanem twarzy. Aby kontynuować, kliknij ikonę odblokowywania."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Odblokowano rozpoznawaniem twarzy. Kliknij, aby kontynuować."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Twarz rozpoznana. Kliknij, aby kontynuować."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Twarz rozpoznana. Aby kontynuować, kliknij ikonę odblokowywania."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Uwierzytelniono"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Użyj kodu PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Użyj wzoru"</string> @@ -317,6 +320,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Przesuń w górę, by otworzyć"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Aby otworzyć, kliknij ikonę odblokowywania"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Odblokowano skanem twarzy. Aby otworzyć, kliknij ikonę odblokowywania."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Odblokowano rozpoznawaniem twarzy. Naciśnij, by otworzyć."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Twarz rozpoznana. Naciśnij, by otworzyć."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Twarz rozpoznana. Aby otworzyć, kliknij ikonę odblokowywania."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Przenieś w lewo"</item> <item msgid="5558598599408514296">"Przenieś w dół"</item> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 9322ae2fece1..bb8943218f9c 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmada"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toque em \"Confirmar\" para concluir"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Desbloqueado pelo rosto. Pressione o ícone de desbloqueio para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Desbloqueado pelo rosto. Pressione para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Rosto reconhecido. Pressione para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Rosto reconhecido. Pressione o ícone para continuar."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticado"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar padrão"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Deslize para cima para abrir"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pressione o ícone de desbloqueio para abrir"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Desbloqueado pelo rosto. Toque no ícone do cadeado para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Desbloqueado pelo rosto. Pressione para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Rosto reconhecido. Pressione para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Rosto reconhecido. Pressione o ícone de desbloq. para abrir."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Mais para a esquerda"</item> <item msgid="5558598599408514296">"Mais para baixo"</item> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index f38b45144fdc..1b82611726f8 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmado"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toque em Confirmar para concluir."</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Desbloqueio com a face. Prima o ícone de desb. p/ continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Desbloqueado com o rosto. Prima para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Rosto reconhecido. Prima para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Rosto reconhecido. Prima ícone de desbloqueio para continuar"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticado"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Utilizar PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Utilizar padrão"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Deslize rapidamente para cima para abrir"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Prima o ícone de desbloqueio para abrir"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Desbloqueio com a face. Prima ícone de desbloqueio p/ abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Desbloqueado com o rosto. Prima para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Rosto reconhecido. Prima para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Rosto reconhecido. Prima o ícone de desbloqueio para abrir."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Mover para a esquerda"</item> <item msgid="5558598599408514296">"Mover para baixo"</item> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 9322ae2fece1..bb8943218f9c 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmada"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toque em \"Confirmar\" para concluir"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Desbloqueado pelo rosto. Pressione o ícone de desbloqueio para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Desbloqueado pelo rosto. Pressione para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Rosto reconhecido. Pressione para continuar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Rosto reconhecido. Pressione o ícone para continuar."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticado"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar padrão"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Deslize para cima para abrir"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pressione o ícone de desbloqueio para abrir"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Desbloqueado pelo rosto. Toque no ícone do cadeado para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Desbloqueado pelo rosto. Pressione para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Rosto reconhecido. Pressione para abrir."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Rosto reconhecido. Pressione o ícone de desbloq. para abrir."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Mais para a esquerda"</item> <item msgid="5558598599408514296">"Mais para baixo"</item> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index a3b4ca55974e..2be95705514a 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmat"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Atingeți Confirmați pentru a finaliza"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"S-a deblocat cu ajutorul feței. Apăsați pictograma de deblocare pentru a continua"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"S-a deblocat cu ajutorul feței. Apăsați pentru a continua."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Chipul a fost recunoscut. Apăsați pentru a continua."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Chip recunoscut. Apăsați pictograma de deblocare să continuați."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentificat"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Folosiți PIN-ul"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Folosiți modelul"</string> @@ -315,6 +318,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Glisați în sus pentru a deschide"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Apăsați pictograma de deblocare pentru a deschide"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"S-a deblocat cu ajutorul feței. Apăsați pictograma de deblocare pentru a deschide"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"S-a deblocat cu ajutorul feței. Apăsați pentru a deschide."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Chipul a fost recunoscut. Apăsați pentru a deschide."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Chip recunoscut. Apăsați pictograma de deblocare pentru a deschide"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Deplasați spre stânga"</item> <item msgid="5558598599408514296">"Deplasați în jos"</item> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 2482cf969ab3..6b9e54ea2d5a 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Подтверждено"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Нажмите \"Подтвердить\""</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Сканирование выполнено. Нажмите на значок разблокировки."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Разблокировано сканированием лица. Нажмите, чтобы продолжить."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Лицо распознано. Нажмите, чтобы продолжить."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Лицо распознано. Нажмите на значок разблокировки."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Аутентификация выполнена"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN-код"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Использовать графический ключ"</string> @@ -317,6 +320,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Проведите вверх, чтобы открыть"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Нажмите на значок разблокировки."</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Сканирование выполнено. Нажмите на значок разблокировки."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Разблокировано сканированием лица. Нажмите, чтобы открыть."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Лицо распознано. Нажмите, чтобы открыть."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Лицо распознано. Нажмите на значок разблокировки."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Переместите палец влево"</item> <item msgid="5558598599408514296">"Переместите палец вниз"</item> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 064841cbc307..be3a8ac039a3 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"තහවුරු කළා"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"සම්පූර්ණ කිරීමට තහවුරු කරන්න තට්ටු කර."</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"මුහුණ මගින් අගුලු හරින ලදි. දිගටම කරගෙන යාමට අගුලු හැරීමේ නිරූපකය ඔබන්න."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"මුහුණ මගින් අගුලු හරින ලදි. ඉදිරියට යාමට ඔබන්න."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"මුහුණ හඳුනා ගන්නා ලදි. ඉදිරියට යාමට ඔබන්න."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"මුහුණ හඳුනා ගන්නා ලදි. ඉදිරියට යාමට අගුලු හැරීමේ නිරූපකය ඔබන්න."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"සත්යාපනය විය"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN භාවිත කරන්න"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"රටාව භාවිත කරන්න"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"විවෘත කිරීමට ස්වයිප් කරන්න"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"විවෘත කිරීමට අගුලු හැරීමේ නිරූපකය ඔබන්න"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"මුහුණ මගින් අගුලු හරින ලදි. විවෘත කිරීමට අගුලු හැරීමේ නිරූපකය ඔබන්න."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"මුහුණ මගින් අගුලු හරින ලදි. විවෘත කිරීමට ඔබන්න."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"මුහුණ හඳුනා ගන්නා ලදි. විවෘත කිරීමට ඔබන්න."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"මුහුණ හඳුනා ගන්නා ලදි. විවෘත කිරීමට අගුලු හැරීමේ නිරූපකය ඔබන්න."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"වමට ගෙන යන්න"</item> <item msgid="5558598599408514296">"පහළට ගෙන යන්න"</item> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 8a6c3671d5ea..ea04d23661c7 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potvrdené"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Overenie dokončíte klepnutím na Potvrdiť"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Odomknuté tvárou. Pokračujte klepnutím na ikonu odomknutia"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Odomknuté tvárou. Pokračujte stlačením."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Tvár bola rozpoznaná. Pokračujte stlačením."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Tvár bola rozpoznaná. Pokračujte stlačením ikony odomknutia"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Overené"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Použiť PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Použiť vzor"</string> @@ -317,6 +320,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Otvorte potiahnutím prstom nahor"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Otvorte klepnutím na ikonu odomknutia"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Odomknuté tvárou. Otvorte klepnutím na ikonu odomknutia."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Odomknuté tvárou. Otvorte stlačením."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Tvár bola rozpoznaná. Otvorte stlačením."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Tvár bola rozpoznaná. Otvorte stlačením ikony odomknutia."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Posunúť doľava"</item> <item msgid="5558598599408514296">"Posunúť nadol"</item> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 8ec4eefb0169..dbb09427151a 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potrjeno"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Za dokončanje se dotaknite »Potrdite«"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Odklenjeno z obrazom. Za nadaljevanje pritisnite ikono za odklepanje."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Odklenjeno z obrazom. Pritisnite za nadaljevanje."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Obraz je prepoznan. Pritisnite za nadaljevanje."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Obraz je prepoznan. Za nadaljevanje pritisnite ikono za odklepanje."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Preverjena pristnost"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Uporabi kodo PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Uporabi vzorec"</string> @@ -317,6 +320,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Povlecite navzgor, da odprete"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Za odpiranje pritisnite ikono za odklepanje."</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Odklenjeno z obrazom. Za odpiranje pritisnite ikono za odklepanje."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Odklenjeno z obrazom. Pritisnite za odpiranje."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Obraz je prepoznan. Pritisnite za odpiranje."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Obraz je prepoznan. Za odpiranje pritisnite ikono za odklepanje."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Premik levo"</item> <item msgid="5558598599408514296">"Premik navzdol"</item> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index c6a06bbe01e5..c3c638aeb35f 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Konfirmuar"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Trokit \"Konfirmo\" për ta përfunduar"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"U shkyç me fytyrë. Shtyp ikonën e shkyçjes për të vazhduar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"U shkyç me fytyrë. Shtyp për të vazhduar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Fytyra u njoh. Shtyp për të vazhduar."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Fytyra u njoh. Shtyp ikonën e shkyçjes për të vazhduar."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"U vërtetua"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Përdor kodin PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Përdor motivin"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Rrëshqit lart për ta hapur"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Shtyp ikonën e shkyçjes për ta hapur"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"U shkyç me fytyrë. Shtyp ikonën e shkyçjes për ta hapur."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"U shkyç me fytyrë. Shtyp për ta hapur."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Fytyra u njoh. Shtyp për ta hapur."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Fytyra u njoh. Shtyp ikonën e shkyçjes për ta hapur."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Lëvize majtas"</item> <item msgid="5558598599408514296">"Lëvize poshtë"</item> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 0ff1663813a0..a06931cb95e1 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Потврђено"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Додирните Потврди да бисте завршили"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Откључано је лицем. Притисните икону откључавања за наставак"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Откључано је лицем. Притисните да бисте наставили."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Лице је препознато. Притисните да бисте наставили."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Лице препознато. Притисните икону откључавања за наставак."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Идентитет је потврђен"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Користите PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Користите шаблон"</string> @@ -315,6 +318,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Превуците нагоре да бисте отворили"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Притисните икону откључавања да бисте отворили."</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Откључано је лицем. Притисните икону откључавања да бисте отворили."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Откључано је лицем. Притисните да бисте отворили."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Лице је препознато. Притисните да бисте отворили."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Лице препознато. Притисните икону откључавања да бисте отворили."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Померите налево"</item> <item msgid="5558598599408514296">"Померите надоле"</item> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 41560fdb2040..3c6d61d3e378 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bekräftat"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Slutför genom att trycka på Bekräfta"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Upplåst med ansiktslås. Tryck på ikonen lås upp för att fortsätta."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Upplåst med ansiktslås. Tryck för att fortsätta."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Ansiktet har identifierats. Tryck för att fortsätta."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Ansiktet har identifierats. Tryck på ikonen lås upp."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentiserad"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Använd pinkod"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Använd mönster"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Öppna genom att svepa uppåt"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Tryck på ikonen lås upp för att öppna"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Upplåst med ansiktslås. Tryck på ikonen lås upp för att öppna."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Upplåst med ansiktslås. Tryck för att öppna."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Ansiktet har identifierats. Tryck för att öppna."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Ansiktet har identifierats. Tryck på ikonen lås upp."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Flytta åt vänster"</item> <item msgid="5558598599408514296">"Flytta nedåt"</item> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 0b185166344c..385f535d5397 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Imethibitishwa"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Gusa Thibitisha ili ukamilishe"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Imefunguliwa kwa kutumia uso wako. Bonyeza aikoni ya kufungua ili uendelee."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Imefunguliwa kwa kutumia uso wako. Bonyeza ili uendelee."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Uso umetambuliwa. Bonyeza ili uendelee."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Uso umetambuliwa. Bonyeza aikoni ya kufungua ili uendelee."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Umethibitishwa"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Tumia PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Tumia mchoro"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Telezesha kidole juu ili ufungue"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Bonyeza aikoni ya kufungua ili ufungue"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Imefunguliwa kwa kutumia uso wako. Bonyeza aikoni ya kufungua ili ufungue."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Imefunguliwa kwa kutumia uso wako. Bonyeza ili ufungue."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Uso umetambuliwa. Bonyeza ili ufungue."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Uso umetambuliwa. Bonyeza aikoni ya kufungua ili ufungue."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Sogeza kushoto"</item> <item msgid="5558598599408514296">"Sogeza chini"</item> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 0ca9f5c2e67b..08264f0686da 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"உறுதிப்படுத்தப்பட்டது"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"முடிக்க \'உறுதிப்படுத்துக\' என்பதை தட்டவும்"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"முகம் மூலம் அன்லாக் செய்யப்பட்டது. தொடர, அன்லாக் ஐகானை அழுத்துக."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"முகம் மூலம் அன்லாக் செய்யப்பட்டது. தொடர அழுத்தவும்."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"முகம் அங்கீகரிக்கப்பட்டது. தொடர அழுத்தவும்."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"முகம் அங்கீகரிக்கப்பட்டது. தொடர அன்லாக் ஐகானை அழுத்தவும்."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"அங்கீகரிக்கப்பட்டது"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"பின்னைப் பயன்படுத்து"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"பேட்டர்னைப் பயன்படுத்து"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"திறப்பதற்கு மேல் நோக்கி ஸ்வைப் செய்யவும்"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"திறக்க, அன்லாக் ஐகானை அழுத்தவும்"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"முகம் மூலம் அன்லாக் செய்யப்பட்டது. திறக்க, அன்லாக் ஐகானை அழுத்துக."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"முகம் மூலம் அன்லாக் செய்யப்பட்டது. திறக்க அழுத்தவும்."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"முகம் அங்கீகரிக்கப்பட்டது. திறக்க அழுத்தவும்."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"முகம் அங்கீகரிக்கப்பட்டது. திறக்க அன்லாக் ஐகானை அழுத்தவும்."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"இடதுபுறம் நகர்த்துங்கள்"</item> <item msgid="5558598599408514296">"கீழே நகர்த்துங்கள்"</item> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 21edccd5e76c..a41a657a8282 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"నిర్ధారించబడింది"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"పూర్తి చేయడానికి \"నిర్ధారించు\" నొక్కండి"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ముఖం ద్వారా అన్లాక్ చేయబడింది. కొనసాగించడానికి అన్లాక్ చిహ్నాన్ని నొక్కండి."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ముఖం ద్వారా అన్లాక్ చేయబడింది. కొనసాగించడానికి నొక్కండి."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ముఖం గుర్తించబడింది. కొనసాగించడానికి నొక్కండి."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ముఖం గుర్తించబడింది. కొనసాగడానికి అన్లాక్ చిహ్నం నొక్కండి."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ప్రామాణీకరించబడింది"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"పిన్ను ఉపయోగించు"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ఆకృతిని ఉపయోగించు"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"తెరవడానికి, పైకి స్వైప్ చేయండి"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"తెరవడానికి అన్లాక్ చిహ్నాన్ని నొక్కండి"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ముఖం ద్వారా అన్లాక్ చేయబడింది. తెరవడానికి అన్లాక్ చిహ్నాన్ని నొక్కండి."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ముఖం ద్వారా అన్లాక్ చేయబడింది. తెరవడానికి నొక్కండి."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ముఖం గుర్తించబడింది. తెరవడానికి నొక్కండి."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"ముఖం గుర్తించబడింది. తెరవడానికి అన్లాక్ చిహ్నం నొక్కండి."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"ఎడమవైపుగా జరపండి"</item> <item msgid="5558598599408514296">"కిందికి జరపండి"</item> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 21203179080e..950fc94dbba8 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ยืนยันแล้ว"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"แตะยืนยันเพื่อดำเนินการให้เสร็จสมบูรณ์"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ปลดล็อกด้วยใบหน้าแล้ว กดไอคอนปลดล็อกเพื่อดำเนินการต่อ"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ปลดล็อกด้วยใบหน้าแล้ว กดเพื่อดำเนินการต่อ"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"จดจำใบหน้าได้ กดเพื่อดำเนินการต่อ"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"จดจำใบหน้าได้ กดไอคอนปลดล็อกเพื่อดำเนินการต่อ"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ตรวจสอบสิทธิ์แล้ว"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ใช้ PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ใช้รูปแบบ"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"เลื่อนขึ้นเพื่อเปิด"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"กดไอคอนปลดล็อกเพื่อเปิด"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ปลดล็อกด้วยใบหน้าแล้ว กดไอคอนปลดล็อกเพื่อเปิด"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ปลดล็อกด้วยใบหน้าแล้ว กดเพื่อเปิด"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"จดจำใบหน้าได้ กดเพื่อเปิด"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"จดจำใบหน้าได้ กดไอคอนปลดล็อกเพื่อเปิด"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"เลื่อนนิ้วไปทางซ้าย"</item> <item msgid="5558598599408514296">"เลื่อนนิ้วลง"</item> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 6ed62f3e86ef..5e2fb53c5e09 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Nakumpirma"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"I-tap ang Kumpirmahin para kumpletuhin"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Na-unlock gamit ang mukha. Pindutin ang icon ng unlock para magpatuloy."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Na-unlock gamit ang mukha. Pindutin para magpatuloy."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Nakilala ang mukha. Pindutin para magpatuloy."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Nakilala ang mukha. Pindutin ang unlock para magpatuloy."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Na-authenticate"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Gumamit ng PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Gumamit ng pattern"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Mag-swipe pataas para buksan"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pindutin ang icon ng unlock para buksan"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Na-unlock gamit ang mukha. Pindutin ang icon ng unlock para buksan."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Na-unlock gamit ang mukha. Pindutin para buksan."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Nakilala ang mukha. Pindutin para buksan."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Nakilala ang mukha. Pindutin ang icon ng unlock para buksan."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Ilipat pakaliwa"</item> <item msgid="5558598599408514296">"Ibaba"</item> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index e3182e00e921..b52d41d43f8c 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Onaylandı"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tamamlamak için Onayla\'ya dokunun"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Kilit, yüzünüzle açıldı. Kilit açma simgesine basın."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Cihazın kilidini yüzünüzle açtınız. Devam etmek için basın."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Yüzünüz tanındı. Devam etmek için basın."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Yüzünüz tanındı. Kilit açma simgesine basın."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Kimliği Doğrulandı"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN kullan"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Deseni kullan"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Açmak için yukarı kaydırın"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Açmak için Kilit açma simgesine basın"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Kilit, yüzünüzle açıldı. Kilit açma simgesine basın."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Cihazın kilidini yüzünüzle açtınız. Açmak için basın."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Yüzünüz tanındı. Açmak için basın."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Yüzünüz tanındı. Kilit açma simgesine basın."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Sola taşı"</item> <item msgid="5558598599408514296">"Aşağı taşı"</item> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 53b09091a5ce..51c61ce3dcf6 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Підтверджено"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Щоб завершити, натисніть \"Підтвердити\""</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Розблоковано (фейсконтроль). Натисніть значок розблокування."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Розблоковано (фейсконтроль). Натисніть, щоб продовжити."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Обличчя розпізнано. Натисніть, щоб продовжити."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Обличчя розпізнано. Натисніть значок розблокування."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Автентифіковано"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Ввести PIN-код"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Намалювати ключ"</string> @@ -317,6 +320,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Проведіть пальцем угору, щоб відкрити"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Щоб відкрити, натисніть значок розблокування."</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Розблоковано (фейсконтроль). Натисніть значок розблокування."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Розблоковано (фейсконтроль). Натисніть, щоб відкрити."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Обличчя розпізнано. Натисніть, щоб відкрити."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Обличчя розпізнано. Натисніть значок розблокування."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Перемістіть палець ліворуч"</item> <item msgid="5558598599408514296">"Перемістіть палець униз"</item> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index 81640392abd7..d2abb7a64454 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"تصدیق شدہ"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"مکمل کرنے کیلئے \'تصدیق کریں\' تھپتھپائیں"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"چہرے سے انلاک کیا گیا۔ جاری رکھنے کیلئے انلاک آئیکن دبائیں۔"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"چہرے سے انلاک کیا گیا۔ جاری رکھنے کے لیے دبائیں۔"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"چہرے کی شناخت ہو گئی۔ جاری رکھنے کے لیے دبائیں۔"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"چہرے کی شناخت ہو گئی۔ جاری رکھنے کیلئے انلاک آئیکن دبائیں۔"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"تصدیق کردہ"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN استعمال کریں"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"پیٹرن کا استعمال کریں"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"کھولنے کے لیے اوپر سوائپ کريں"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"کھولنے کیلئے انلاک آئیکن دبائیں"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"چہرے سے انلاک کیا گیا۔ کھولنے کیلئے انلاک آئیکن دبائیں۔"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"چہرے سے انلاک کیا گیا۔ کھولنے کے لیے دبائیں۔"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"چہرے کی شناخت ہو گئی۔ کھولنے کے لیے دبائیں۔"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"چہرے کی شناخت ہو گئی۔ کھولنے کیلئے انلاک آئیکن دبائیں۔"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"دائیں منتقل کریں"</item> <item msgid="5558598599408514296">"نیچے منتقل کریں"</item> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index b115cfd36778..293677ae7daa 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Tasdiqlangan"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tasdiqlash uchun tegining"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Yuz orqali ochilgan. Davom etish uchun ochish belgisini bosing."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Yuz orqali ochildi. Davom etish uchun bosing."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Yuz aniqlandi. Davom etish uchun bosing."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Yuz aniqlandi. Davom etish uchun ochish belgisini bosing."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Tasdiqlandi"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN kod kiritish"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Grafik kalitdan foydalanish"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Ochish uchun tepaga suring"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Ochish uchun ochish belgisini bosing"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Yuz orqali ochilgan. Ochish uchun ochish belgisini bosing."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Yuz orqali ochildi. Ochish uchun bosing."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Yuz aniqlandi. Ochish uchun bosing."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Yuz aniqlandi. Ochish uchun ochish belgisini bosing."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Chapga siljitish"</item> <item msgid="5558598599408514296">"Pastga siljitish"</item> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index d57c702a2027..af4bf0fafc5c 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Ðã xác nhận"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Nhấn vào Xác nhận để hoàn tất"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Đã mở khoá bằng khuôn mặt. Nhấn vào biểu tượng mở khoá để tiếp tục."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Đã mở khoá bằng khuôn mặt. Hãy nhấn để tiếp tục."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Đã nhận diện khuôn mặt. Hãy nhấn để tiếp tục."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Đã nhận diện khuôn mặt. Nhấn biểu tượng mở khoá để tiếp tục."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Đã xác thực"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Dùng mã PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Dùng hình mở khóa"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Vuốt lên để mở"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Nhấn biểu tượng mở khoá để mở"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Đã mở khoá bằng khuôn mặt. Nhấn vào biểu tượng mở khoá để mở."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Đã mở khoá bằng khuôn mặt. Nhấn để mở."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Đã nhận diện khuôn mặt. Nhấn để mở."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Đã nhận diện khuôn mặt. Nhấn biểu tượng mở khoá để mở."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Di chuyển sang trái"</item> <item msgid="5558598599408514296">"Di chuyển xuống"</item> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index e2cc98e87495..c624654f5a67 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"已确认"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"点按“确认”即可完成"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"已通过面孔识别解锁。按下解锁图标即可继续。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"已通过面孔识别解锁。点按即可继续。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"识别出面孔。点按即可继续。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"识别出面孔。按下解锁图标即可继续。"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"已经过身份验证"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"使用 PIN 码"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"使用图案"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"向上滑动即可打开"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"按下解锁图标即可打开"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"已通过面孔识别解锁。按下解锁图标即可打开。"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"已通过面孔识别解锁。点按即可打开。"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"识别出面孔。点按即可打开。"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"识别出面孔。按下解锁图标即可打开。"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"左移"</item> <item msgid="5558598599408514296">"下移"</item> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 9877835e11c7..5a8c6728727f 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"已確認"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"輕按 [確定] 以完成"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"已使用面孔解鎖。按解鎖圖示即可繼續。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"已使用面孔解鎖。按下即可繼續操作。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"已識別面孔。按下即可繼續操作。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"已識別面孔。按解鎖圖示即可繼續。"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"驗證咗"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"使用 PIN"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"使用圖案"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"向上滑動即可開啟"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"按解鎖圖示即可開啟"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"已使用面孔解鎖。按解鎖圖示即可開啟。"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"已使用面孔解鎖。按下即可開啟。"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"已識別面孔。按下即可開啟。"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"已識別面孔。按解鎖圖示即可開啟。"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"向左移"</item> <item msgid="5558598599408514296">"向下移"</item> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index c1bb69a7b68a..d00afda86a33 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"確認完畢"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"輕觸 [確認] 完成驗證設定"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"裝置已透過人臉解鎖,按下「解鎖」圖示即可繼續操作。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"裝置已透過你的臉解鎖,按下即可繼續操作。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"臉孔辨識完成,按下即可繼續操作。"</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"臉孔辨識完成,按下「解鎖」圖示即可繼續操作。"</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"已通過驗證"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"使用 PIN 碼"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"使用解鎖圖案"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"向上滑動即可開啟"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"按下「解鎖」圖示即可開啟"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"裝置已透過人臉解鎖,按下「解鎖」圖示即可開啟。"</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"裝置已透過你的臉解鎖,按下即可開啟。"</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"臉孔辨識完成,按下即可開啟。"</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"臉孔辨識完成,按下「解鎖」圖示即可開啟。"</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"向左移"</item> <item msgid="5558598599408514296">"向下移"</item> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 3e83354faa5c..6545d729cc01 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -137,6 +137,9 @@ <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Kuqinisekisiwe"</string> <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Thepha okuthi Qinisekisa ukuze uqedele"</string> <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Ivulwe ngobuso. Cindezela isithonjana sokuvula ukuze uqhubeke."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Vula ngobuso. Cindezela ukuze uqhubeke."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Ubuso buyaziwa. Cindezela ukuze uqhubeke."</string> + <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Ubuso buyaziwa. Cindezela isithonjana sokuvula ukuze uqhubeke."</string> <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Kugunyaziwe"</string> <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Sebenzisa iphinikhodi"</string> <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Sebenzisa iphethini"</string> @@ -313,6 +316,9 @@ <string name="keyguard_unlock" msgid="8031975796351361601">"Swayiphela phezulu ukuze uvule"</string> <string name="keyguard_unlock_press" msgid="9140109453735019209">"Cindezela isithonjana sokuvula ukuze uvule"</string> <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Ivulwe ngobuso. Cindezela isithonjana sokuvula ukuze uvule."</string> + <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Vula ngobuso. Cindezela ukuze uvule."</string> + <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Ubuso buyaziwa. Cindezela ukuze uvule."</string> + <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Ubuso buyaziwa. Cindezela isithonjana sokuvula ukuze uvule."</string> <string-array name="udfps_accessibility_touch_hints"> <item msgid="1901953991150295169">"Yisa kwesokunxele"</item> <item msgid="5558598599408514296">"Yehlisa"</item> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 7ed915600230..597e88093de8 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -580,6 +580,9 @@ 280 </integer> + <!-- The time (in ms) needed to trigger the lock icon view's long-press affordance --> + <integer name="config_lockIconLongPress" translatable="false">200</integer> + <!-- package name of a built-in camera app to use to restrict implicit intent resolution when the double-press power gesture is used. Ignored if empty. --> <string translatable="false" name="config_cameraGesturePackage"></string> @@ -611,6 +614,13 @@ 2 - Override the setting to never bypass keyguard --> <integer name="config_face_unlock_bypass_override">0</integer> + <!-- Which face help messages to surface when fingerprint is also enrolled. + Message ids correspond with the acquired ids in BiometricFaceConstants --> + <integer-array name="config_face_help_msgs_when_fingerprint_enrolled"> + <item>25</item> + <item>26</item> + </integer-array> + <!-- Whether the communal service should be enabled --> <bool name="config_communalServiceEnabled">false</bool> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 66488415ff9f..160dcd0fbccc 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -857,7 +857,7 @@ <!-- The maximum offset for the under-display fingerprint sensor (UDFPS) icon in either direction that elements are moved to prevent burn-in on AOD--> <dimen name="udfps_burn_in_offset_x">7px</dimen> - <dimen name="udfps_burn_in_offset_y">28px</dimen> + <dimen name="udfps_burn_in_offset_y">20px</dimen> <!-- The absolute side margins of quick settings --> <dimen name="quick_settings_bottom_margin_media">8dp</dimen> diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml index 5eacc3e6006b..dca5ea836fa4 100644 --- a/packages/SystemUI/res/values/ids.xml +++ b/packages/SystemUI/res/values/ids.xml @@ -176,5 +176,8 @@ <item type="id" name="rounded_corner_top_right"/> <item type="id" name="rounded_corner_bottom_left"/> <item type="id" name="rounded_corner_bottom_right"/> + + <!-- face scanning view id --> + <item type="id" name="face_scanning_anim"/> </resources> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index af8d7ed22ed3..e144b43294c6 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -341,6 +341,12 @@ <string name="biometric_dialog_tap_confirm">Tap Confirm to complete</string> <!-- Message shown when a biometric has authenticated with a user's face and is waiting for the user to confirm authentication [CHAR LIMIT=60]--> <string name="biometric_dialog_tap_confirm_with_face">Unlocked by face. Press the unlock icon to continue.</string> + <!-- Message shown when a biometric has authenticated with a user's face and is waiting for the user to confirm authentication [CHAR LIMIT=60]--> + <string name="biometric_dialog_tap_confirm_with_face_alt_1">Unlocked by face. Press to continue.</string> + <!-- Message shown when a biometric has authenticated with a user's face and is waiting for the user to confirm authentication [CHAR LIMIT=60]--> + <string name="biometric_dialog_tap_confirm_with_face_alt_2">Face recognized. Press to continue.</string> + <!-- Message shown when a biometric has authenticated with a user's face and is waiting for the user to confirm authentication [CHAR LIMIT=60]--> + <string name="biometric_dialog_tap_confirm_with_face_alt_3">Face recognized. Press the unlock icon to continue.</string> <!-- Talkback string when a biometric is authenticated [CHAR LIMIT=NONE] --> <string name="biometric_dialog_authenticated">Authenticated</string> @@ -803,6 +809,13 @@ <!-- Message shown when non-bypass face authentication succeeds and UDFPS is supported. Provides extra instructions for how the user can enter their device [CHAR LIMIT=60] --> <string name="keyguard_face_successful_unlock_press">Unlocked by face. Press the unlock icon to open.</string> + <!-- Message shown when non-bypass face authentication succeeds and UDFPS is supported. Provides extra instructions for how the user can enter their device [CHAR LIMIT=60] --> + <string name="keyguard_face_successful_unlock_press_alt_1">Unlocked by face. Press to open.</string> + <!-- Message shown when non-bypass face authentication succeeds and UDFPS is supported. Provides extra instructions for how the user can enter their device [CHAR LIMIT=60] --> + <string name="keyguard_face_successful_unlock_press_alt_2">Face recognized. Press to open.</string> + <!-- Message shown when non-bypass face authentication succeeds and UDFPS is supported. Provides extra instructions for how the user can enter their device [CHAR LIMIT=60] --> + <string name="keyguard_face_successful_unlock_press_alt_3">Face recognized. Press the unlock icon to open.</string> + <!-- Messages shown when users press outside of udfps region during --> <string-array name="udfps_accessibility_touch_hints"> diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 13690f30ab3b..e87feff59b83 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -275,7 +275,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab HashMap<Integer, SimData> mSimDatas = new HashMap<>(); HashMap<Integer, ServiceState> mServiceStates = new HashMap<Integer, ServiceState>(); - private int mRingMode; private int mPhoneState; private boolean mKeyguardIsVisible; private boolean mCredentialAttempted; @@ -752,6 +751,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private void handleFingerprintAuthFailed() { Assert.isMainThread(); + if (mHandler.hasCallbacks(mFpCancelNotReceived)) { + Log.d(TAG, "handleFingerprintAuthFailed()" + + " triggered while waiting for cancellation, removing watchdog"); + mHandler.removeCallbacks(mFpCancelNotReceived); + } for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { @@ -782,6 +786,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private void handleFingerprintAuthenticated(int authUserId, boolean isStrongBiometric) { Trace.beginSection("KeyGuardUpdateMonitor#handlerFingerPrintAuthenticated"); + if (mHandler.hasCallbacks(mFpCancelNotReceived)) { + Log.d(TAG, "handleFingerprintAuthenticated()" + + " triggered while waiting for cancellation, removing watchdog"); + mHandler.removeCallbacks(mFpCancelNotReceived); + } try { final int userId; try { @@ -1041,7 +1050,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private void handleFaceError(int msgId, String errString) { Assert.isMainThread(); - if (DEBUG_FACE) Log.d(TAG, "Face error received: " + errString); + if (DEBUG_FACE) Log.d(TAG, "Face error received: " + errString + " msgId=" + msgId); if (mHandler.hasCallbacks(mFaceCancelNotReceived)) { mHandler.removeCallbacks(mFaceCancelNotReceived); } @@ -1511,6 +1520,20 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab handleFingerprintAuthenticated(userId, isStrongBiometric); }; + /** + * Propagates a pointer down event to keyguard. + */ + public void onUdfpsPointerDown(int sensorId) { + mFingerprintAuthenticationCallback.onUdfpsPointerDown(sensorId); + } + + /** + * Propagates a pointer up event to keyguard. + */ + public void onUdfpsPointerUp(int sensorId) { + mFingerprintAuthenticationCallback.onUdfpsPointerUp(sensorId); + } + @VisibleForTesting final FingerprintManager.AuthenticationCallback mFingerprintAuthenticationCallback = new AuthenticationCallback() { @@ -1551,15 +1574,18 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab Trace.endSection(); } + /** + * Note, this is currently called from UdfpsController. + */ @Override public void onUdfpsPointerDown(int sensorId) { Log.d(TAG, "onUdfpsPointerDown, sensorId: " + sensorId); requestFaceAuth(true); - if (isFaceDetectionRunning()) { - mKeyguardBypassController.setUserHasDeviceEntryIntent(true); - } } + /** + * Note, this is currently called from UdfpsController. + */ @Override public void onUdfpsPointerUp(int sensorId) { Log.d(TAG, "onUdfpsPointerUp, sensorId: " + sensorId); @@ -1587,9 +1613,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab "faceFailure-" + reason); handleFaceAuthFailed(); - if (mKeyguardBypassController != null) { - mKeyguardBypassController.setUserHasDeviceEntryIntent(false); - } } @Override @@ -1597,10 +1620,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded"); handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric()); Trace.endSection(); - - if (mKeyguardBypassController != null) { - mKeyguardBypassController.setUserHasDeviceEntryIntent(false); - } } @Override @@ -1611,9 +1630,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Override public void onAuthenticationError(int errMsgId, CharSequence errString) { handleFaceError(errMsgId, errString.toString()); - if (mKeyguardBypassController != null) { - mKeyguardBypassController.setUserHasDeviceEntryIntent(false); - } if (mActiveUnlockConfig.shouldRequestActiveUnlockOnFaceError(errMsgId)) { requestActiveUnlock( @@ -2177,6 +2193,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab && mBiometricEnabledForUser.get(userId)); } + public boolean isFaceSupported() { + return mFaceManager != null && mFaceManager.isHardwareDetected(); + } + /** * @return true if there's at least one udfps enrolled for the current user. */ @@ -2296,10 +2316,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab updateFaceListeningState(BIOMETRIC_ACTION_START); } - public boolean isFaceAuthUserRequested() { - return mIsFaceAuthUserRequested; - } - /** * In case face auth is running, cancel it. */ @@ -2307,6 +2323,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab stopListeningForFace(); } + public boolean isFaceScanning() { + return mFaceRunningState == BIOMETRIC_STATE_RUNNING; + } + private void updateFaceListeningState(int action) { // If this message exists, we should not authenticate again until this message is // consumed by the handler @@ -3160,11 +3180,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mSecureCameraLaunched = false; } - if (mKeyguardBypassController != null) { - // LS visibility has changed, so reset deviceEntryIntent - mKeyguardBypassController.setUserHasDeviceEntryIntent(false); - } - for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { @@ -3809,6 +3824,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab pw.println(" enabledByUser=" + mBiometricEnabledForUser.get(userId)); pw.println(" mSecureCameraLaunched=" + mSecureCameraLaunched); pw.println(" mBouncerFullyShown=" + mBouncerFullyShown); + pw.println(" mNeedsSlowUnlockTransition=" + mNeedsSlowUnlockTransition); } mListenModels.print(pw); diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java index 680b8bd70837..0097196fd841 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java @@ -83,8 +83,8 @@ public class LockIconViewController extends ViewController<LockIconView> impleme private static final int sLockIconRadiusPx = (int) (sDefaultDensity * 36); private static final VibrationAttributes TOUCH_VIBRATION_ATTRIBUTES = VibrationAttributes.createForUsage(VibrationAttributes.USAGE_TOUCH); - private static final long LONG_PRESS_TIMEOUT = 200L; // milliseconds + private final long mLongPressTimeout; @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @NonNull private final KeyguardViewController mKeyguardViewController; @NonNull private final StatusBarStateController mStatusBarStateController; @@ -176,6 +176,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme mView.setImageDrawable(mIcon); mUnlockedLabel = resources.getString(R.string.accessibility_unlock_button); mLockedLabel = resources.getString(R.string.accessibility_lock_icon); + mLongPressTimeout = resources.getInteger(R.integer.config_lockIconLongPress); dumpManager.registerDumpable(TAG, this); } @@ -545,7 +546,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme /** * Handles the touch if it is within the lock icon view and {@link #isActionable()} is true. * Subsequently, will trigger {@link #onLongPress()} if a touch is continuously in the lock icon - * area for {@link #LONG_PRESS_TIMEOUT} ms. + * area for {@link #mLongPressTimeout} ms. * * Touch speed debouncing mimics logic from the velocity tracker in {@link UdfpsController}. */ @@ -585,7 +586,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme mDownDetected = true; mLongPressCancelRunnable = mExecutor.executeDelayed( - this::onLongPress, LONG_PRESS_TIMEOUT); + this::onLongPress, mLongPressTimeout); break; case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_HOVER_MOVE: @@ -600,7 +601,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme + "high pointer velocity=" + velocity); mLongPressCancelRunnable.run(); mLongPressCancelRunnable = mExecutor.executeDelayed( - this::onLongPress, LONG_PRESS_TIMEOUT); + this::onLongPress, mLongPressTimeout); } break; case MotionEvent.ACTION_UP: @@ -651,7 +652,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme Process.myUid(), getContext().getOpPackageName(), UdfpsController.EFFECT_CLICK, - "lock-icon-device-entry", + "lock-screen-lock-icon-longpress", TOUCH_VIBRATION_ATTRIBUTES); mKeyguardViewController.showBouncer(/* scrim */ true); @@ -676,6 +677,12 @@ public class LockIconViewController extends ViewController<LockIconView> impleme } private boolean isActionable() { + if (mIsBouncerShowing) { + Log.v(TAG, "lock icon long-press ignored, bouncer already showing."); + // a long press gestures from AOD may have already triggered the bouncer to show, + // so this touch is no longer actionable + return false; + } return mUdfpsSupported || mShowUnlockIcon; } diff --git a/packages/SystemUI/src/com/android/systemui/DisplayCutoutBaseView.kt b/packages/SystemUI/src/com/android/systemui/DisplayCutoutBaseView.kt index 34164f3b7306..d2c229b8ead1 100644 --- a/packages/SystemUI/src/com/android/systemui/DisplayCutoutBaseView.kt +++ b/packages/SystemUI/src/com/android/systemui/DisplayCutoutBaseView.kt @@ -279,7 +279,7 @@ open class DisplayCutoutBaseView : View, RegionInterceptableView { } companion object { - private const val HIDDEN_CAMERA_PROTECTION_SCALE = 0.5f + const val HIDDEN_CAMERA_PROTECTION_SCALE = 0.5f @JvmStatic protected fun transformPhysicalToLogicalCoordinates( @Surface.Rotation rotation: Int, diff --git a/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt b/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt new file mode 100644 index 000000000000..c5955860aebf --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt @@ -0,0 +1,375 @@ +/* + * Copyright (C) 2022 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.systemui + +import android.animation.Animator +import android.animation.AnimatorListenerAdapter +import android.animation.AnimatorSet +import android.animation.ValueAnimator +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Matrix +import android.graphics.Paint +import android.graphics.Path +import android.graphics.RectF +import android.hardware.biometrics.BiometricSourceType +import android.view.View +import androidx.core.graphics.ColorUtils +import com.android.keyguard.KeyguardUpdateMonitor +import com.android.keyguard.KeyguardUpdateMonitorCallback +import com.android.settingslib.Utils +import com.android.systemui.animation.Interpolators +import com.android.systemui.plugins.statusbar.StatusBarStateController +import java.util.concurrent.Executor + +/** + * When the face is enrolled, we use this view to show the face scanning animation and the camera + * protection on the keyguard. + */ +class FaceScanningOverlay( + context: Context, + pos: Int, + val statusBarStateController: StatusBarStateController, + val keyguardUpdateMonitor: KeyguardUpdateMonitor, + val mainExecutor: Executor +) : ScreenDecorations.DisplayCutoutView(context, pos) { + private var showScanningAnim = false + private val rimPaint = Paint() + private var rimProgress: Float = HIDDEN_CAMERA_PROTECTION_SCALE + private var rimAnimator: AnimatorSet? = null + private val rimRect = RectF() + private var cameraProtectionColor = Color.BLACK + var faceScanningAnimColor = Utils.getColorAttrDefaultColor(context, + com.android.systemui.R.attr.wallpaperTextColorAccent) + private var cameraProtectionAnimator: ValueAnimator? = null + var hideOverlayRunnable: Runnable? = null + var faceAuthSucceeded = false + + init { + visibility = View.INVISIBLE // only show this view when face scanning is happening + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + mainExecutor.execute { + keyguardUpdateMonitor.registerCallback(keyguardUpdateMonitorCallback) + } + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + mainExecutor.execute { + keyguardUpdateMonitor.removeCallback(keyguardUpdateMonitorCallback) + } + } + + override fun setColor(color: Int) { + cameraProtectionColor = color + invalidate() + } + + override fun drawCutoutProtection(canvas: Canvas) { + if (rimProgress > HIDDEN_RIM_SCALE && !protectionRect.isEmpty) { + val rimPath = Path(protectionPath) + val scaleMatrix = Matrix().apply { + val rimBounds = RectF() + rimPath.computeBounds(rimBounds, true) + setScale(rimProgress, rimProgress, rimBounds.centerX(), rimBounds.centerY()) + } + rimPath.transform(scaleMatrix) + rimPaint.style = Paint.Style.FILL + val rimPaintAlpha = rimPaint.alpha + rimPaint.color = ColorUtils.blendARGB( + faceScanningAnimColor, + Color.WHITE, + statusBarStateController.dozeAmount) + rimPaint.alpha = rimPaintAlpha + canvas.drawPath(rimPath, rimPaint) + } + + if (cameraProtectionProgress > HIDDEN_CAMERA_PROTECTION_SCALE && + !protectionRect.isEmpty) { + val scaledProtectionPath = Path(protectionPath) + val scaleMatrix = Matrix().apply { + val protectionPathRect = RectF() + scaledProtectionPath.computeBounds(protectionPathRect, true) + setScale(cameraProtectionProgress, cameraProtectionProgress, + protectionPathRect.centerX(), protectionPathRect.centerY()) + } + scaledProtectionPath.transform(scaleMatrix) + paint.style = Paint.Style.FILL + paint.color = cameraProtectionColor + canvas.drawPath(scaledProtectionPath, paint) + } + } + + override fun updateVisOnUpdateCutout(): Boolean { + return false // instead, we always update the visibility whenever face scanning starts/ends + } + + override fun enableShowProtection(show: Boolean) { + val showScanningAnimNow = keyguardUpdateMonitor.isFaceScanning && show + if (showScanningAnimNow == showScanningAnim) { + return + } + showScanningAnim = showScanningAnimNow + updateProtectionBoundingPath() + // Delay the relayout until the end of the animation when hiding, + // otherwise we'd clip it. + if (showScanningAnim) { + visibility = View.VISIBLE + requestLayout() + } + + cameraProtectionAnimator?.cancel() + cameraProtectionAnimator = ValueAnimator.ofFloat(cameraProtectionProgress, + if (showScanningAnimNow) SHOW_CAMERA_PROTECTION_SCALE + else HIDDEN_CAMERA_PROTECTION_SCALE).apply { + startDelay = + if (showScanningAnim) 0 + else if (faceAuthSucceeded) PULSE_SUCCESS_DISAPPEAR_DURATION + else PULSE_ERROR_DISAPPEAR_DURATION + duration = + if (showScanningAnim) CAMERA_PROTECTION_APPEAR_DURATION + else if (faceAuthSucceeded) CAMERA_PROTECTION_SUCCESS_DISAPPEAR_DURATION + else CAMERA_PROTECTION_ERROR_DISAPPEAR_DURATION + interpolator = + if (showScanningAnim) Interpolators.STANDARD_ACCELERATE + else if (faceAuthSucceeded) Interpolators.STANDARD + else Interpolators.STANDARD_DECELERATE + addUpdateListener(ValueAnimator.AnimatorUpdateListener { + animation: ValueAnimator -> + cameraProtectionProgress = animation.animatedValue as Float + invalidate() + }) + addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + cameraProtectionAnimator = null + if (!showScanningAnim) { + visibility = View.INVISIBLE + hideOverlayRunnable?.run() + hideOverlayRunnable = null + requestLayout() + } + } + }) + } + + rimAnimator?.cancel() + rimAnimator = AnimatorSet().apply { + if (showScanningAnim) { + val rimAppearAnimator = ValueAnimator.ofFloat(SHOW_CAMERA_PROTECTION_SCALE, + PULSE_RADIUS_OUT).apply { + duration = PULSE_APPEAR_DURATION + interpolator = Interpolators.STANDARD_DECELERATE + addUpdateListener(ValueAnimator.AnimatorUpdateListener { + animation: ValueAnimator -> + rimProgress = animation.animatedValue as Float + invalidate() + }) + } + + // animate in camera protection, rim, and then pulse in/out + playSequentially(cameraProtectionAnimator, rimAppearAnimator, + createPulseAnimator(), createPulseAnimator(), + createPulseAnimator(), createPulseAnimator(), + createPulseAnimator(), createPulseAnimator()) + } else { + val rimDisappearAnimator = ValueAnimator.ofFloat( + rimProgress, + if (faceAuthSucceeded) PULSE_RADIUS_SUCCESS + else SHOW_CAMERA_PROTECTION_SCALE + ).apply { + duration = + if (faceAuthSucceeded) PULSE_SUCCESS_DISAPPEAR_DURATION + else PULSE_ERROR_DISAPPEAR_DURATION + interpolator = + if (faceAuthSucceeded) Interpolators.STANDARD_DECELERATE + else Interpolators.STANDARD + addUpdateListener(ValueAnimator.AnimatorUpdateListener { + animation: ValueAnimator -> + rimProgress = animation.animatedValue as Float + invalidate() + }) + addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + rimProgress = HIDDEN_RIM_SCALE + invalidate() + } + }) + } + if (faceAuthSucceeded) { + val successOpacityAnimator = ValueAnimator.ofInt(255, 0).apply { + duration = PULSE_SUCCESS_DISAPPEAR_DURATION + interpolator = Interpolators.LINEAR + addUpdateListener(ValueAnimator.AnimatorUpdateListener { + animation: ValueAnimator -> + rimPaint.alpha = animation.animatedValue as Int + invalidate() + }) + addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + rimPaint.alpha = 255 + invalidate() + } + }) + } + val rimSuccessAnimator = AnimatorSet() + rimSuccessAnimator.playTogether(rimDisappearAnimator, successOpacityAnimator) + playTogether(rimSuccessAnimator, cameraProtectionAnimator) + } else { + playTogether(rimDisappearAnimator, cameraProtectionAnimator) + } + } + + addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + rimAnimator = null + if (!showScanningAnim) { + requestLayout() + } + } + }) + start() + } + } + + fun createPulseAnimator(): AnimatorSet { + return AnimatorSet().apply { + val pulseInwards = ValueAnimator.ofFloat( + PULSE_RADIUS_OUT, PULSE_RADIUS_IN).apply { + duration = PULSE_DURATION_INWARDS + interpolator = Interpolators.STANDARD + addUpdateListener(ValueAnimator.AnimatorUpdateListener { + animation: ValueAnimator -> + rimProgress = animation.animatedValue as Float + invalidate() + }) + } + val pulseOutwards = ValueAnimator.ofFloat( + PULSE_RADIUS_IN, PULSE_RADIUS_OUT).apply { + duration = PULSE_DURATION_OUTWARDS + interpolator = Interpolators.STANDARD + addUpdateListener(ValueAnimator.AnimatorUpdateListener { + animation: ValueAnimator -> + rimProgress = animation.animatedValue as Float + invalidate() + }) + } + playSequentially(pulseInwards, pulseOutwards) + } + } + + override fun updateProtectionBoundingPath() { + super.updateProtectionBoundingPath() + rimRect.set(protectionRect) + rimRect.scale(rimProgress) + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + if (mBounds.isEmpty()) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + return + } + if (showScanningAnim) { + // Make sure that our measured height encompasses the extra space for the animation + mTotalBounds.union(mBoundingRect) + mTotalBounds.union( + rimRect.left.toInt(), + rimRect.top.toInt(), + rimRect.right.toInt(), + rimRect.bottom.toInt()) + setMeasuredDimension( + resolveSizeAndState(mTotalBounds.width(), widthMeasureSpec, 0), + resolveSizeAndState(mTotalBounds.height(), heightMeasureSpec, 0)) + } else { + setMeasuredDimension( + resolveSizeAndState(mBoundingRect.width(), widthMeasureSpec, 0), + resolveSizeAndState(mBoundingRect.height(), heightMeasureSpec, 0)) + } + } + + private val keyguardUpdateMonitorCallback = object : KeyguardUpdateMonitorCallback() { + override fun onBiometricAuthenticated( + userId: Int, + biometricSourceType: BiometricSourceType?, + isStrongBiometric: Boolean + ) { + if (biometricSourceType == BiometricSourceType.FACE) { + post { + faceAuthSucceeded = true + enableShowProtection(true) + } + } + } + + override fun onBiometricAcquired( + biometricSourceType: BiometricSourceType?, + acquireInfo: Int + ) { + if (biometricSourceType == BiometricSourceType.FACE) { + post { + faceAuthSucceeded = false // reset + } + } + } + + override fun onBiometricAuthFailed(biometricSourceType: BiometricSourceType?) { + if (biometricSourceType == BiometricSourceType.FACE) { + post { + faceAuthSucceeded = false + enableShowProtection(false) + } + } + } + + override fun onBiometricError( + msgId: Int, + errString: String?, + biometricSourceType: BiometricSourceType? + ) { + if (biometricSourceType == BiometricSourceType.FACE) { + post { + faceAuthSucceeded = false + enableShowProtection(false) + } + } + } + } + + companion object { + private const val HIDDEN_RIM_SCALE = HIDDEN_CAMERA_PROTECTION_SCALE + private const val SHOW_CAMERA_PROTECTION_SCALE = 1f + + private const val PULSE_RADIUS_IN = 1.1f + private const val PULSE_RADIUS_OUT = 1.125f + private const val PULSE_RADIUS_SUCCESS = 1.25f + + private const val CAMERA_PROTECTION_APPEAR_DURATION = 250L + private const val PULSE_APPEAR_DURATION = 250L // without start delay + + private const val PULSE_DURATION_INWARDS = 500L + private const val PULSE_DURATION_OUTWARDS = 500L + + private const val PULSE_SUCCESS_DISAPPEAR_DURATION = 400L + private const val CAMERA_PROTECTION_SUCCESS_DISAPPEAR_DURATION = 500L // without start delay + + private const val PULSE_ERROR_DISAPPEAR_DURATION = 200L + private const val CAMERA_PROTECTION_ERROR_DISAPPEAR_DURATION = 300L // without start delay + } +} diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorHwcLayer.kt b/packages/SystemUI/src/com/android/systemui/ScreenDecorHwcLayer.kt index 0df2730a48eb..a74f2f8a5e34 100644 --- a/packages/SystemUI/src/com/android/systemui/ScreenDecorHwcLayer.kt +++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorHwcLayer.kt @@ -44,7 +44,7 @@ import kotlin.math.ceil import kotlin.math.floor /** - * When the HWC of the device supports Composition.DISPLAY_DECORATON, we use this layer to draw + * When the HWC of the device supports Composition.DISPLAY_DECORATION, we use this layer to draw * screen decorations. */ class ScreenDecorHwcLayer(context: Context, displayDecorationSupport: DisplayDecorationSupport) diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java index c04463ad6906..edcaf492874d 100644 --- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java +++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java @@ -69,12 +69,14 @@ import android.widget.FrameLayout; import androidx.annotation.VisibleForTesting; import com.android.internal.util.Preconditions; +import com.android.settingslib.Utils; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.decor.DecorProvider; import com.android.systemui.decor.DecorProviderFactory; import com.android.systemui.decor.DecorProviderKt; +import com.android.systemui.decor.FaceScanningProviderFactory; import com.android.systemui.decor.OverlayWindow; import com.android.systemui.decor.PrivacyDotDecorProviderFactory; import com.android.systemui.decor.RoundedCornerDecorProviderFactory; @@ -90,8 +92,10 @@ import com.android.systemui.util.settings.SecureSettings; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Objects; +import java.util.Set; import java.util.concurrent.Executor; import javax.inject.Inject; @@ -131,6 +135,8 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab private final PrivacyDotViewController mDotViewController; private final ThreadFactory mThreadFactory; private final DecorProviderFactory mDotFactory; + private final FaceScanningProviderFactory mFaceScanningFactory; + public final int mFaceScanningViewId; @VisibleForTesting protected RoundedCornerResDelegate mRoundedCornerResDelegate; @@ -161,46 +167,84 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab @VisibleForTesting protected DisplayInfo mDisplayInfo = new DisplayInfo(); - private CameraAvailabilityListener.CameraTransitionCallback mCameraTransitionCallback = - new CameraAvailabilityListener.CameraTransitionCallback() { - @Override - public void onApplyCameraProtection(@NonNull Path protectionPath, @NonNull Rect bounds) { - if (mScreenDecorHwcLayer != null) { - mScreenDecorHwcLayer.setProtection(protectionPath, bounds); - mScreenDecorHwcLayer.enableShowProtection(true); + @VisibleForTesting + protected void showCameraProtection(@NonNull Path protectionPath, @NonNull Rect bounds) { + if (mFaceScanningFactory.shouldShowFaceScanningAnim()) { + DisplayCutoutView overlay = (DisplayCutoutView) getOverlayView( + mFaceScanningViewId); + if (overlay != null) { + overlay.setProtection(protectionPath, bounds); + overlay.enableShowProtection(true); + updateOverlayWindowVisibilityIfViewExists( + overlay.findViewById(mFaceScanningViewId)); + // immediately return, bc FaceScanningOverlay also renders the camera + // protection, so we don't need to show the camera protection in + // mScreenDecorHwcLayer or mCutoutViews return; } - if (mCutoutViews == null) { - Log.w(TAG, "DisplayCutoutView do not initialized"); - return; + } + + if (mScreenDecorHwcLayer != null) { + mScreenDecorHwcLayer.setProtection(protectionPath, bounds); + mScreenDecorHwcLayer.enableShowProtection(true); + return; + } + + if (mCutoutViews == null) { + Log.w(TAG, "DisplayCutoutView not initialized onApplyCameraProtection"); + return; + } + + // Show the extra protection around the front facing camera if necessary + for (DisplayCutoutView dcv : mCutoutViews) { + // Check Null since not all mCutoutViews[pos] be inflated at the meanwhile + if (dcv != null) { + dcv.setProtection(protectionPath, bounds); + dcv.enableShowProtection(true); } - // Show the extra protection around the front facing camera if necessary - for (DisplayCutoutView dcv : mCutoutViews) { - // Check Null since not all mCutoutViews[pos] be inflated at the meanwhile - if (dcv != null) { - dcv.setProtection(protectionPath, bounds); - dcv.enableShowProtection(true); - } + } + } + + @VisibleForTesting + protected void hideCameraProtection() { + FaceScanningOverlay faceScanningOverlay = + (FaceScanningOverlay) getOverlayView(mFaceScanningViewId); + if (faceScanningOverlay != null) { + faceScanningOverlay.setHideOverlayRunnable(() -> { + updateOverlayWindowVisibilityIfViewExists( + faceScanningOverlay.findViewById(mFaceScanningViewId)); + }); + faceScanningOverlay.enableShowProtection(false); + } + + if (mScreenDecorHwcLayer != null) { + mScreenDecorHwcLayer.enableShowProtection(false); + return; + } + + if (mCutoutViews == null) { + Log.w(TAG, "DisplayCutoutView not initialized onHideCameraProtection"); + return; + } + // Go back to the regular anti-aliasing + for (DisplayCutoutView dcv : mCutoutViews) { + // Check Null since not all mCutoutViews[pos] be inflated at the meanwhile + if (dcv != null) { + dcv.enableShowProtection(false); } } + } + + private CameraAvailabilityListener.CameraTransitionCallback mCameraTransitionCallback = + new CameraAvailabilityListener.CameraTransitionCallback() { + @Override + public void onApplyCameraProtection(@NonNull Path protectionPath, @NonNull Rect bounds) { + showCameraProtection(protectionPath, bounds); + } @Override public void onHideCameraProtection() { - if (mScreenDecorHwcLayer != null) { - mScreenDecorHwcLayer.enableShowProtection(false); - return; - } - if (mCutoutViews == null) { - Log.w(TAG, "DisplayCutoutView do not initialized"); - return; - } - // Go back to the regular anti-aliasing - for (DisplayCutoutView dcv : mCutoutViews) { - // Check Null since not all mCutoutViews[pos] be inflated at the meanwhile - if (dcv != null) { - dcv.enableShowProtection(false); - } - } + hideCameraProtection(); } }; @@ -209,25 +253,24 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab new PrivacyDotViewController.ShowingListener() { @Override public void onPrivacyDotShown(@Nullable View v) { - setOverlayWindowVisibilityIfViewExist(v, View.VISIBLE); + updateOverlayWindowVisibilityIfViewExists(v); } @Override public void onPrivacyDotHidden(@Nullable View v) { - setOverlayWindowVisibilityIfViewExist(v, View.INVISIBLE); + updateOverlayWindowVisibilityIfViewExists(v); } }; @VisibleForTesting - protected void setOverlayWindowVisibilityIfViewExist(@Nullable View view, - @View.Visibility int visibility) { + protected void updateOverlayWindowVisibilityIfViewExists(@Nullable View view) { if (view == null) { return; } mExecutor.execute(() -> { // We don't need to control the window visibility if rounded corners or cutout is drawn // on sw layer since the overlay windows are always visible in this case. - if (mOverlays == null || !isOnlyPrivacyDotInSwLayer()) { + if (mOverlays == null || !shouldOptimizeVisibility()) { return; } @@ -236,7 +279,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab continue; } if (overlay.getView(view.getId()) != null) { - overlay.getRootView().setVisibility(visibility); + overlay.getRootView().setVisibility(getWindowVisibility(overlay, true)); return; } } @@ -258,7 +301,8 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab UserTracker userTracker, PrivacyDotViewController dotViewController, ThreadFactory threadFactory, - PrivacyDotDecorProviderFactory dotFactory) { + PrivacyDotDecorProviderFactory dotFactory, + FaceScanningProviderFactory faceScanningFactory) { super(context); mMainExecutor = mainExecutor; mSecureSettings = secureSettings; @@ -268,6 +312,8 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab mDotViewController = dotViewController; mThreadFactory = threadFactory; mDotFactory = dotFactory; + mFaceScanningFactory = faceScanningFactory; + mFaceScanningViewId = com.android.systemui.R.id.face_scanning_anim; } @Override @@ -289,6 +335,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab @NonNull private List<DecorProvider> getProviders(boolean hasHwLayer) { List<DecorProvider> decorProviders = new ArrayList<>(mDotFactory.getProviders()); + decorProviders.addAll(mFaceScanningFactory.getProviders()); if (!hasHwLayer) { decorProviders.addAll(mRoundedCornerFactory.getProviders()); } @@ -446,6 +493,13 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab cutoutView.onDisplayChanged(displayId); } } + + DisplayCutoutView overlay = (DisplayCutoutView) getOverlayView(mFaceScanningViewId); + if (overlay != null) { + // handle display resolution changes + overlay.onDisplayChanged(displayId); + } + if (mScreenDecorHwcLayer != null) { mScreenDecorHwcLayer.onDisplayChanged(displayId); } @@ -466,7 +520,6 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab if (overlay == null) { continue; } - final View view = overlay.getView(id); if (view != null) { return view; @@ -503,7 +556,9 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab } private void setupDecorations() { - if (hasRoundedCorners() || shouldDrawCutout() || isPrivacyDotEnabled()) { + if (hasRoundedCorners() || shouldDrawCutout() || isPrivacyDotEnabled() + || mFaceScanningFactory.getHasProviders()) { + List<DecorProvider> decorProviders = getProviders(mHwcScreenDecorationSupport != null); removeRedundantOverlayViews(decorProviders); @@ -512,21 +567,24 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab } else { removeHwcOverlay(); } + final DisplayCutout cutout = getCutout(); - final boolean isOnlyPrivacyDotInSwLayer = isOnlyPrivacyDotInSwLayer(); + final boolean shouldOptimizeVisibility = shouldOptimizeVisibility(); for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) { - if (shouldShowSwLayerCutout(i, cutout) || shouldShowSwLayerRoundedCorner(i, cutout) + if (shouldShowSwLayerCutout(i, cutout) + || shouldShowSwLayerFaceScan(i, cutout) + || shouldShowSwLayerRoundedCorner(i, cutout) || shouldShowSwLayerPrivacyDot(i, cutout)) { Pair<List<DecorProvider>, List<DecorProvider>> pair = DecorProviderKt.partitionAlignedBound(decorProviders, i); decorProviders = pair.getSecond(); - createOverlay(i, pair.getFirst(), isOnlyPrivacyDotInSwLayer); + createOverlay(i, pair.getFirst(), shouldOptimizeVisibility); } else { removeOverlay(i); } } - if (isOnlyPrivacyDotInSwLayer) { + if (shouldOptimizeVisibility) { mDotViewController.setShowingListener(mPrivacyDotShowingListener); } else { mDotViewController.setShowingListener(null); @@ -565,6 +623,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab } mColorInversionSetting.setListening(true); mColorInversionSetting.onChange(false); + updateColorInversion(mColorInversionSetting.getValue()); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_USER_SWITCHED); @@ -626,59 +685,61 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab @View.Visibility private int getWindowVisibility(@NonNull OverlayWindow overlay, - boolean isOnlyPrivacyDotInSwLayer) { - if (!isOnlyPrivacyDotInSwLayer) { - // Multiple views inside overlay, no need to optimize + boolean shouldOptimizeVisibility) { + if (!shouldOptimizeVisibility) { + // All overlays have visible views so there's no need to optimize visibility. + // For example, the rounded corners could exist in each overlay and since the rounded + // corners are always visible, there's no need to optimize visibility. return View.VISIBLE; } + // Optimize if it's just the privacy dot & face scanning animation, since the privacy + // dot and face scanning overlay aren't always visible. int[] ids = { R.id.privacy_dot_top_left_container, R.id.privacy_dot_top_right_container, R.id.privacy_dot_bottom_left_container, - R.id.privacy_dot_bottom_right_container + R.id.privacy_dot_bottom_right_container, + mFaceScanningViewId }; for (int id: ids) { - final View view = overlay.getView(id); - if (view != null && view.getVisibility() == View.VISIBLE) { - // Only privacy dot in sw layers, overlay shall be VISIBLE if one of privacy dot - // views inside this overlay is VISIBLE + final View notAlwaysVisibleViews = overlay.getView(id); + if (notAlwaysVisibleViews != null + && notAlwaysVisibleViews.getVisibility() == View.VISIBLE) { + // Overlay is VISIBLE if one the views inside this overlay is VISIBLE return View.VISIBLE; } } - // Only privacy dot in sw layers, overlay shall be INVISIBLE like default if no privacy dot - // view inside this overlay is VISIBLE. + + // Only non-visible views in this overlay, so set overlay to INVISIBLE return View.INVISIBLE; } private void createOverlay( @BoundsPosition int pos, @NonNull List<DecorProvider> decorProviders, - boolean isOnlyPrivacyDotInSwLayer) { + boolean shouldOptimizeVisibility) { if (mOverlays == null) { mOverlays = new OverlayWindow[BOUNDS_POSITION_LENGTH]; } if (mOverlays[pos] != null) { - initOverlay(mOverlays[pos], decorProviders, isOnlyPrivacyDotInSwLayer); + initOverlay(mOverlays[pos], decorProviders, shouldOptimizeVisibility); return; } - mOverlays[pos] = new OverlayWindow(mContext); - initOverlay(mOverlays[pos], decorProviders, isOnlyPrivacyDotInSwLayer); + initOverlay(mOverlays[pos], decorProviders, shouldOptimizeVisibility); final ViewGroup overlayView = mOverlays[pos].getRootView(); overlayView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE); overlayView.setAlpha(0); overlayView.setForceDarkAllowed(false); - // Only show cutout and rounded corners in mOverlays when hwc don't support screen - // decoration. + // Only show cutout in mOverlays when hwc doesn't support screen decoration if (mHwcScreenDecorationSupport == null) { if (mCutoutViews == null) { mCutoutViews = new DisplayCutoutView[BOUNDS_POSITION_LENGTH]; } mCutoutViews[pos] = new DisplayCutoutView(mContext, pos); - mCutoutViews[pos].setColor(mTintColor); overlayView.addView(mCutoutViews[pos]); mCutoutViews[pos].updateRotation(mRotation); } @@ -736,7 +797,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab private void initOverlay( @NonNull OverlayWindow overlay, @NonNull List<DecorProvider> decorProviders, - boolean isOnlyPrivacyDotInSwLayer) { + boolean shouldOptimizeVisibility) { if (!overlay.hasSameProviders(decorProviders)) { decorProviders.forEach(provider -> { if (overlay.getView(provider.getViewId()) != null) { @@ -746,9 +807,10 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab overlay.addDecorProvider(provider, mRotation); }); } - // Use visibility of privacy dot views if only privacy dot in sw layer - overlay.getRootView().setVisibility( - getWindowVisibility(overlay, isOnlyPrivacyDotInSwLayer)); + // Use visibility of privacy dot views & face scanning view to determine the overlay's + // visibility if the screen decoration SW layer overlay isn't persistently showing + // (ie: rounded corners always showing in SW layer) + overlay.getRootView().setVisibility(getWindowVisibility(overlay, shouldOptimizeVisibility)); } @VisibleForTesting @@ -780,7 +842,8 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH | WindowManager.LayoutParams.FLAG_SLIPPERY - | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, + | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN + | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT); lp.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS | WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION; @@ -888,23 +951,28 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab mTintColor = Color.RED; } - // When the hwc supports screen decorations, the layer will use the A8 color mode which - // won't be affected by the color inversion. If the composition goes the client composition - // route, the color inversion will be handled by the RenderEngine. - if (mOverlays == null || mHwcScreenDecorationSupport != null) { + if (mOverlays == null) { return; } - ColorStateList tintList = ColorStateList.valueOf(mTintColor); - mRoundedCornerResDelegate.setColorTintList(tintList); - - Integer[] roundedCornerIds = { - R.id.rounded_corner_top_left, - R.id.rounded_corner_top_right, - R.id.rounded_corner_bottom_left, - R.id.rounded_corner_bottom_right - }; - + // When the hwc supports screen decorations, the layer will use the A8 color mode which + // won't be affected by the color inversion. If the composition goes the client composition + // route, the color inversion will be handled by the RenderEngine. + final Set<Integer> viewsMayNeedColorUpdate = new HashSet<>(); + if (mHwcScreenDecorationSupport == null) { + ColorStateList tintList = ColorStateList.valueOf(mTintColor); + mRoundedCornerResDelegate.setColorTintList(tintList); + viewsMayNeedColorUpdate.add(R.id.rounded_corner_top_left); + viewsMayNeedColorUpdate.add(R.id.rounded_corner_top_right); + viewsMayNeedColorUpdate.add(R.id.rounded_corner_bottom_left); + viewsMayNeedColorUpdate.add(R.id.rounded_corner_bottom_right); + viewsMayNeedColorUpdate.add(R.id.display_cutout); + } + if (getOverlayView(mFaceScanningViewId) != null) { + viewsMayNeedColorUpdate.add(mFaceScanningViewId); + } + final Integer[] views = new Integer[viewsMayNeedColorUpdate.size()]; + viewsMayNeedColorUpdate.toArray(views); for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) { if (mOverlays[i] == null) { continue; @@ -914,12 +982,13 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab View child; for (int j = 0; j < size; j++) { child = overlayView.getChildAt(j); - if (child instanceof DisplayCutoutView) { + if (viewsMayNeedColorUpdate.contains(child.getId()) + && child instanceof DisplayCutoutView) { ((DisplayCutoutView) child).setColor(mTintColor); } } - mOverlays[i].onReloadResAndMeasure(roundedCornerIds, mProviderRefreshToken, mRotation, - mDisplayUniqueId); + mOverlays[i].onReloadResAndMeasure(views, mProviderRefreshToken, + mRotation, mDisplayUniqueId); } } @@ -971,8 +1040,20 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab public void dump(@NonNull PrintWriter pw, @NonNull String[] args) { pw.println("ScreenDecorations state:"); pw.println(" DEBUG_DISABLE_SCREEN_DECORATIONS:" + DEBUG_DISABLE_SCREEN_DECORATIONS); + if (DEBUG_DISABLE_SCREEN_DECORATIONS) { + return; + } + pw.println(" mIsPrivacyDotEnabled:" + isPrivacyDotEnabled()); - pw.println(" isOnlyPrivacyDotInSwLayer:" + isOnlyPrivacyDotInSwLayer()); + pw.println(" shouldOptimizeOverlayVisibility:" + shouldOptimizeVisibility()); + final boolean supportsShowingFaceScanningAnim = mFaceScanningFactory.getHasProviders(); + pw.println(" supportsShowingFaceScanningAnim:" + supportsShowingFaceScanningAnim); + if (supportsShowingFaceScanningAnim) { + pw.println(" canShowFaceScanningAnim:" + + mFaceScanningFactory.canShowFaceScanningAnim()); + pw.println(" shouldShowFaceScanningAnim (at time dump was taken):" + + mFaceScanningFactory.shouldShowFaceScanningAnim()); + } pw.println(" mPendingConfigChange:" + mPendingConfigChange); if (mHwcScreenDecorationSupport != null) { pw.println(" mHwcScreenDecorationSupport:"); @@ -1041,6 +1122,14 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab // update all provider views inside overlay updateOverlayProviderViews(); } + + FaceScanningOverlay faceScanningOverlay = + (FaceScanningOverlay) getOverlayView(mFaceScanningViewId); + if (faceScanningOverlay != null) { + faceScanningOverlay.setFaceScanningAnimColor( + Utils.getColorAttrDefaultColor(faceScanningOverlay.getContext(), + com.android.systemui.R.attr.wallpaperTextColorAccent)); + } } private boolean hasRoundedCorners() { @@ -1074,6 +1163,11 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab return isPrivacyDotEnabled() && isDefaultShownOverlayPos(pos, cutout); } + private boolean shouldShowSwLayerFaceScan(@BoundsPosition int pos, + @Nullable DisplayCutout cutout) { + return mFaceScanningFactory.getHasProviders() && isDefaultShownOverlayPos(pos, cutout); + } + private boolean shouldShowSwLayerCutout(@BoundsPosition int pos, @Nullable DisplayCutout cutout) { final Rect[] bounds = cutout == null ? null : cutout.getBoundingRectsAll(); @@ -1082,8 +1176,8 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab && mHwcScreenDecorationSupport == null); } - private boolean isOnlyPrivacyDotInSwLayer() { - return isPrivacyDotEnabled() + private boolean shouldOptimizeVisibility() { + return (isPrivacyDotEnabled() || mFaceScanningFactory.getHasProviders()) && (mHwcScreenDecorationSupport != null || (!hasRoundedCorners() && !shouldDrawCutout()) ); @@ -1197,9 +1291,9 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab } public static class DisplayCutoutView extends DisplayCutoutBaseView { - private final List<Rect> mBounds = new ArrayList(); - private final Rect mBoundingRect = new Rect(); - private Rect mTotalBounds = new Rect(); + final List<Rect> mBounds = new ArrayList(); + final Rect mBoundingRect = new Rect(); + Rect mTotalBounds = new Rect(); private int mColor = Color.BLACK; private int mRotation; @@ -1209,6 +1303,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab public DisplayCutoutView(Context context, @BoundsPosition int pos) { super(context); mInitialPosition = pos; + paint.setColor(mColor); paint.setStyle(Paint.Style.FILL); setId(R.id.display_cutout); @@ -1253,11 +1348,15 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab } else { newVisible = GONE; } - if (newVisible != getVisibility()) { + if (updateVisOnUpdateCutout() && newVisible != getVisibility()) { setVisibility(newVisible); } } + protected boolean updateVisOnUpdateCutout() { + return true; + } + private void updateBoundingPath() { final Path path = displayInfo.displayCutout.getCutoutPath(); if (path != null) { @@ -1305,7 +1404,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab } if (showProtection) { - // Make sure that our measured height encompases the protection + // Make sure that our measured height encompasses the protection mTotalBounds.union(mBoundingRect); mTotalBounds.union((int) protectionRect.left, (int) protectionRect.top, (int) protectionRect.right, (int) protectionRect.bottom); diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt index cd16379cd5b4..606a73a6ac38 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintIconController.kt @@ -36,12 +36,20 @@ open class AuthBiometricFingerprintIconController( iconView: ImageView ) : AuthIconController(context, iconView) { + var iconLayoutParamsSize = 0 + set(value) { + if (field == value) { + return + } + iconView.layoutParams.width = value + iconView.layoutParams.height = value + field = value + } + init { - val size = context.resources.getDimensionPixelSize( + iconLayoutParamsSize = context.resources.getDimensionPixelSize( R.dimen.biometric_dialog_fingerprint_icon_size ) - iconView.layoutParams.width = size - iconView.layoutParams.height = size } override fun updateIcon(@BiometricState lastState: Int, @BiometricState newState: Int) { diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintView.kt index 368bc3aadb70..24046f08e489 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintView.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintView.kt @@ -22,6 +22,7 @@ import android.util.Log import android.widget.FrameLayout import android.widget.TextView import com.android.systemui.R +import com.android.systemui.biometrics.AuthController.ScaleFactorProvider private const val TAG = "AuthBiometricFingerprintView" @@ -35,6 +36,7 @@ open class AuthBiometricFingerprintView( private set private var udfpsAdapter: UdfpsDialogMeasureAdapter? = null + private var scaleFactorProvider: ScaleFactorProvider? = null /** Set the [sensorProps] of this sensor so the view can be customized prior to layout. */ fun setSensorProperties(sensorProps: FingerprintSensorPropertiesInternal) { @@ -42,9 +44,15 @@ open class AuthBiometricFingerprintView( udfpsAdapter = if (isUdfps) UdfpsDialogMeasureAdapter(this, sensorProps) else null } + fun setScaleFactorProvider(scaleProvider: ScaleFactorProvider?) { + scaleFactorProvider = scaleProvider + } + override fun onMeasureInternal(width: Int, height: Int): AuthDialog.LayoutParams { val layoutParams = super.onMeasureInternal(width, height) - return udfpsAdapter?.onMeasureInternal(width, height, layoutParams) ?: layoutParams + val scale = scaleFactorProvider?.provide() ?: 1.0f + return udfpsAdapter?.onMeasureInternal(width, height, layoutParams, + scale) ?: layoutParams } override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) { @@ -80,6 +88,13 @@ open class AuthBiometricFingerprintView( override fun createIconController(): AuthIconController = AuthBiometricFingerprintIconController(mContext, mIconView) + fun updateOverrideIconLayoutParamsSize() { + udfpsAdapter?.let { + (mIconController as? AuthBiometricFingerprintIconController)?.iconLayoutParamsSize = + it.getSensorDiameter(scaleFactorProvider?.provide() ?: 1.0f) + } + } + override fun onAttachedToWindow() { super.onAttachedToWindow() showTouchSensorString() diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java index 1413f4a81574..d7ae9ef841bf 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java @@ -59,7 +59,7 @@ import java.util.Set; /** * Contains the Biometric views (title, subtitle, icon, buttons, etc.) and its controllers. */ -public class AuthBiometricView extends LinearLayout { +public abstract class AuthBiometricView extends LinearLayout { private static final String TAG = "AuthBiometricView"; @@ -116,7 +116,7 @@ public class AuthBiometricView extends LinearLayout { void onAction(int action); } - protected final Handler mHandler; + private final Handler mHandler; private final AccessibilityManager mAccessibilityManager; private final LockPatternUtils mLockPatternUtils; protected final int mTextColorError; @@ -155,8 +155,8 @@ public class AuthBiometricView extends LinearLayout { // Measurements when biometric view is showing text, buttons, etc. @Nullable @VisibleForTesting AuthDialog.LayoutParams mLayoutParams; - protected Callback mCallback; - protected @BiometricState int mState; + private Callback mCallback; + @BiometricState private int mState; private float mIconOriginalY; @@ -166,6 +166,8 @@ public class AuthBiometricView extends LinearLayout { private final Runnable mResetErrorRunnable; private final Runnable mResetHelpRunnable; + private Animator.AnimatorListener mJankListener; + private final OnClickListener mBackgroundClickListener = (view) -> { if (mState == STATE_AUTHENTICATED) { Log.w(TAG, "Ignoring background click after authenticated"); @@ -250,18 +252,9 @@ public class AuthBiometricView extends LinearLayout { return false; } - /** - * Create the controller for managing the icons transitions during the prompt. - * - * Subclass should override. - */ + /** Create the controller for managing the icons transitions during the prompt.*/ @NonNull - protected AuthIconController createIconController() { - return new AuthIconController(mContext, mIconView) { - @Override - public void updateIcon(int lastState, int newState) {} - }; - } + protected abstract AuthIconController createIconController(); void setPanelController(AuthPanelController panelController) { mPanelController = panelController; @@ -291,6 +284,10 @@ public class AuthBiometricView extends LinearLayout { mRequireConfirmation = requireConfirmation && supportsRequireConfirmation(); } + void setJankListener(Animator.AnimatorListener jankListener) { + mJankListener = jankListener; + } + @VisibleForTesting final void updateSize(@AuthDialog.DialogSize int newSize) { Log.v(TAG, "Current size: " + mSize + " New size: " + newSize); @@ -381,6 +378,9 @@ public class AuthBiometricView extends LinearLayout { } }); + if (mJankListener != null) { + as.addListener(mJankListener); + } as.play(iconAnimator).with(opacityAnimator); as.start(); // Animate the panel @@ -436,6 +436,9 @@ public class AuthBiometricView extends LinearLayout { animators.add(translationAnimator); animators.add(opacityAnimator); + if (mJankListener != null) { + as.addListener(mJankListener); + } as.playTogether(animators); as.setDuration(mAnimationDurationLong * 2 / 3); as.start(); @@ -881,4 +884,14 @@ public class AuthBiometricView extends LinearLayout { @AuthDialog.DialogSize int getSize() { return mSize; } + + /** If authentication has successfully occurred and the view is done. */ + boolean isAuthenticated() { + return mState == STATE_AUTHENTICATED; + } + + /** If authentication is currently in progress. */ + boolean isAuthenticating() { + return mState == STATE_AUTHENTICATING; + } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java index 6da2f50aac27..bc1c5f4baceb 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java @@ -19,6 +19,9 @@ package com.android.systemui.biometrics; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_MULTI_SENSOR_DEFAULT; import static android.hardware.biometrics.BiometricManager.BiometricMultiSensorMode; +import static com.android.internal.jank.InteractionJankMonitor.CUJ_BIOMETRIC_PROMPT_TRANSITION; + +import android.animation.Animator; import android.annotation.DurationMillisLong; import android.annotation.IntDef; import android.annotation.NonNull; @@ -53,13 +56,16 @@ import android.widget.LinearLayout; import android.widget.ScrollView; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.widget.LockPatternUtils; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; +import com.android.systemui.biometrics.AuthController.ScaleFactorProvider; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.util.concurrency.DelayableExecutor; +import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.HashSet; @@ -84,6 +90,13 @@ public class AuthContainerView extends LinearLayout private static final int STATE_ANIMATING_OUT = 4; private static final int STATE_GONE = 5; + /** Shows biometric prompt dialog animation. */ + private static final String SHOW = "show"; + /** Dismiss biometric prompt dialog animation. */ + private static final String DISMISS = "dismiss"; + /** Transit biometric prompt dialog to pin, password, pattern credential panel. */ + private static final String TRANSIT = "transit"; + @Retention(RetentionPolicy.SOURCE) @IntDef({STATE_UNKNOWN, STATE_ANIMATING_IN, STATE_PENDING_DISMISS, STATE_SHOWING, STATE_ANIMATING_OUT, STATE_GONE}) @@ -98,6 +111,7 @@ public class AuthContainerView extends LinearLayout private final CredentialCallback mCredentialCallback; private final LockPatternUtils mLockPatternUtils; private final WakefulnessLifecycle mWakefulnessLifecycle; + private final InteractionJankMonitor mInteractionJankMonitor; @VisibleForTesting final BiometricCallback mBiometricCallback; @@ -133,6 +147,7 @@ public class AuthContainerView extends LinearLayout long mRequestId = -1; boolean mSkipAnimation = false; @BiometricMultiSensorMode int mMultiSensorConfig = BIOMETRIC_MULTI_SENSOR_DEFAULT; + ScaleFactorProvider mScaleProvider; } public static class Builder { @@ -196,15 +211,22 @@ public class AuthContainerView extends LinearLayout return this; } + public Builder setScaleFactorProvider(ScaleFactorProvider scaleProvider) { + mConfig.mScaleProvider = scaleProvider; + return this; + } + public AuthContainerView build(@Background DelayableExecutor bgExecutor, int[] sensorIds, @Nullable List<FingerprintSensorPropertiesInternal> fpProps, @Nullable List<FaceSensorPropertiesInternal> faceProps, @NonNull WakefulnessLifecycle wakefulnessLifecycle, @NonNull UserManager userManager, - @NonNull LockPatternUtils lockPatternUtils) { + @NonNull LockPatternUtils lockPatternUtils, + @NonNull InteractionJankMonitor jankMonitor) { mConfig.mSensorIds = sensorIds; return new AuthContainerView(mConfig, fpProps, faceProps, wakefulnessLifecycle, - userManager, lockPatternUtils, new Handler(Looper.getMainLooper()), bgExecutor); + userManager, lockPatternUtils, jankMonitor, new Handler(Looper.getMainLooper()), + bgExecutor); } } @@ -257,6 +279,7 @@ public class AuthContainerView extends LinearLayout @NonNull WakefulnessLifecycle wakefulnessLifecycle, @NonNull UserManager userManager, @NonNull LockPatternUtils lockPatternUtils, + @NonNull InteractionJankMonitor jankMonitor, @NonNull Handler mainHandler, @NonNull @Background DelayableExecutor bgExecutor) { super(config.mContext); @@ -283,6 +306,7 @@ public class AuthContainerView extends LinearLayout mPanelView = mFrameLayout.findViewById(R.id.panel); mPanelController = new AuthPanelController(mContext, mPanelView); mBackgroundExecutor = bgExecutor; + mInteractionJankMonitor = jankMonitor; // Inflate biometric view only if necessary. if (Utils.isBiometricAllowed(mConfig.mPromptInfo)) { @@ -296,12 +320,16 @@ public class AuthContainerView extends LinearLayout (AuthBiometricFingerprintAndFaceView) layoutInflater.inflate( R.layout.auth_biometric_fingerprint_and_face_view, null, false); fingerprintAndFaceView.setSensorProperties(fpProperties); + fingerprintAndFaceView.setScaleFactorProvider(config.mScaleProvider); + fingerprintAndFaceView.updateOverrideIconLayoutParamsSize(); mBiometricView = fingerprintAndFaceView; } else if (fpProperties != null) { final AuthBiometricFingerprintView fpView = (AuthBiometricFingerprintView) layoutInflater.inflate( R.layout.auth_biometric_fingerprint_view, null, false); fpView.setSensorProperties(fpProperties); + fpView.setScaleFactorProvider(config.mScaleProvider); + fpView.updateOverrideIconLayoutParamsSize(); mBiometricView = fpView; } else if (faceProperties != null) { mBiometricView = (AuthBiometricFaceView) layoutInflater.inflate( @@ -320,6 +348,8 @@ public class AuthContainerView extends LinearLayout mBiometricView.setBackgroundView(mBackgroundView); mBiometricView.setUserId(mConfig.mUserId); mBiometricView.setEffectiveUserId(mEffectiveUserId); + mBiometricView.setJankListener(getJankListener(mBiometricView, TRANSIT, + AuthDialog.ANIMATE_MEDIUM_TO_LARGE_DURATION_MS)); } // TODO: De-dupe the logic with AuthCredentialPasswordView @@ -447,6 +477,7 @@ public class AuthContainerView extends LinearLayout .translationY(0) .setDuration(animateDuration) .setInterpolator(mLinearOutSlowIn) + .setListener(getJankListener(mPanelView, SHOW, animateDuration)) .withLayer() .withEndAction(this::onDialogAnimatedIn) .start(); @@ -454,6 +485,7 @@ public class AuthContainerView extends LinearLayout .translationY(0) .setDuration(animateDuration) .setInterpolator(mLinearOutSlowIn) + .setListener(getJankListener(mBiometricScrollView, SHOW, animateDuration)) .withLayer() .start(); if (mCredentialView != null && mCredentialView.isAttachedToWindow()) { @@ -462,6 +494,7 @@ public class AuthContainerView extends LinearLayout .translationY(0) .setDuration(animateDuration) .setInterpolator(mLinearOutSlowIn) + .setListener(getJankListener(mCredentialView, SHOW, animateDuration)) .withLayer() .start(); } @@ -470,11 +503,49 @@ public class AuthContainerView extends LinearLayout .setDuration(animateDuration) .setInterpolator(mLinearOutSlowIn) .withLayer() + .setListener(getJankListener(this, SHOW, animateDuration)) .start(); }); } } + private Animator.AnimatorListener getJankListener(View v, String type, long timeout) { + return new Animator.AnimatorListener() { + @Override + public void onAnimationStart(@androidx.annotation.NonNull Animator animation) { + if (!v.isAttachedToWindow()) { + Log.w(TAG, "Un-attached view should not begin Jank trace."); + return; + } + mInteractionJankMonitor.begin(InteractionJankMonitor.Configuration.Builder.withView( + CUJ_BIOMETRIC_PROMPT_TRANSITION, v).setTag(type).setTimeout(timeout)); + } + + @Override + public void onAnimationEnd(@androidx.annotation.NonNull Animator animation) { + if (!v.isAttachedToWindow()) { + Log.w(TAG, "Un-attached view should not end Jank trace."); + return; + } + mInteractionJankMonitor.end(CUJ_BIOMETRIC_PROMPT_TRANSITION); + } + + @Override + public void onAnimationCancel(@androidx.annotation.NonNull Animator animation) { + if (!v.isAttachedToWindow()) { + Log.w(TAG, "Un-attached view should not cancel Jank trace."); + return; + } + mInteractionJankMonitor.cancel(CUJ_BIOMETRIC_PROMPT_TRANSITION); + } + + @Override + public void onAnimationRepeat(@androidx.annotation.NonNull Animator animation) { + // no-op + } + }; + } + private static boolean shouldUpdatePositionForUdfps(@NonNull View view) { if (view instanceof AuthBiometricFingerprintView) { return ((AuthBiometricFingerprintView) view).isUdfps(); @@ -658,6 +729,7 @@ public class AuthContainerView extends LinearLayout .translationY(mTranslationY) .setDuration(animateDuration) .setInterpolator(mLinearOutSlowIn) + .setListener(getJankListener(mPanelView, DISMISS, animateDuration)) .withLayer() .withEndAction(endActionRunnable) .start(); @@ -665,6 +737,7 @@ public class AuthContainerView extends LinearLayout .translationY(mTranslationY) .setDuration(animateDuration) .setInterpolator(mLinearOutSlowIn) + .setListener(getJankListener(mBiometricScrollView, DISMISS, animateDuration)) .withLayer() .start(); if (mCredentialView != null && mCredentialView.isAttachedToWindow()) { @@ -672,6 +745,7 @@ public class AuthContainerView extends LinearLayout .translationY(mTranslationY) .setDuration(animateDuration) .setInterpolator(mLinearOutSlowIn) + .setListener(getJankListener(mCredentialView, DISMISS, animateDuration)) .withLayer() .start(); } @@ -679,6 +753,7 @@ public class AuthContainerView extends LinearLayout .alpha(0f) .setDuration(animateDuration) .setInterpolator(mLinearOutSlowIn) + .setListener(getJankListener(this, DISMISS, animateDuration)) .withLayer() .start(); }); @@ -739,4 +814,36 @@ public class AuthContainerView extends LinearLayout lp.token = windowToken; return lp; } + + @Override + public void dump(@NonNull PrintWriter pw, @NonNull String[] args) { + pw.println(" isAttachedToWindow=" + isAttachedToWindow()); + pw.println(" containerState=" + mContainerState); + pw.println(" pendingCallbackReason=" + mPendingCallbackReason); + pw.println(" config exist=" + (mConfig != null)); + if (mConfig != null) { + pw.println(" config.sensorIds exist=" + (mConfig.mSensorIds != null)); + } + final AuthBiometricView biometricView = mBiometricView; + pw.println(" scrollView=" + findViewById(R.id.biometric_scrollview)); + pw.println(" biometricView=" + biometricView); + if (biometricView != null) { + int[] ids = { + R.id.title, + R.id.subtitle, + R.id.description, + R.id.biometric_icon_frame, + R.id.biometric_icon, + R.id.indicator, + R.id.button_bar, + R.id.button_negative, + R.id.button_use_credential, + R.id.button_confirm, + R.id.button_try_again + }; + for (final int id: ids) { + pw.println(" " + biometricView.findViewById(id)); + } + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java index 17396469c10a..a097c5e76149 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java @@ -62,6 +62,7 @@ import android.view.WindowManager; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.os.SomeArgs; import com.android.internal.widget.LockPatternUtils; import com.android.systemui.CoreStartable; @@ -75,6 +76,7 @@ import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.Execution; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -143,6 +145,7 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba private boolean mAllFingerprintAuthenticatorsRegistered; @NonNull private final UserManager mUserManager; @NonNull private final LockPatternUtils mLockPatternUtils; + @NonNull private final InteractionJankMonitor mInteractionJankMonitor; private final @Background DelayableExecutor mBackgroundExecutor; @VisibleForTesting @@ -489,6 +492,9 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba final float scaleFactor = android.util.DisplayUtils.getPhysicalPixelDisplaySizeRatio( mStableDisplaySize.x, mStableDisplaySize.y, displayInfo.getNaturalWidth(), displayInfo.getNaturalHeight()); + if (scaleFactor == Float.POSITIVE_INFINITY) { + return new PointF(mFaceAuthSensorLocation.x, mFaceAuthSensorLocation.y); + } return new PointF(mFaceAuthSensorLocation.x * scaleFactor, mFaceAuthSensorLocation.y * scaleFactor); } @@ -549,6 +555,7 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba @NonNull UserManager userManager, @NonNull LockPatternUtils lockPatternUtils, @NonNull StatusBarStateController statusBarStateController, + @NonNull InteractionJankMonitor jankMonitor, @Main Handler handler, @Background DelayableExecutor bgExecutor) { super(context); @@ -566,6 +573,7 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba mSidefpsControllerFactory = sidefpsControllerFactory; mDisplayManager = displayManager; mWindowManager = windowManager; + mInteractionJankMonitor = jankMonitor; mUdfpsEnrolledForUser = new SparseBooleanArray(); mOrientationListener = new BiometricDisplayListener( @@ -1037,8 +1045,36 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba .setOperationId(operationId) .setRequestId(requestId) .setMultiSensorConfig(multiSensorConfig) + .setScaleFactorProvider(() -> { + return getScaleFactor(); + }) .build(bgExecutor, sensorIds, mFpProps, mFaceProps, wakefulnessLifecycle, - userManager, lockPatternUtils); + userManager, lockPatternUtils, mInteractionJankMonitor); + } + + @Override + public void dump(@NonNull PrintWriter pw, @NonNull String[] args) { + final AuthDialog dialog = mCurrentDialog; + pw.println(" stableDisplaySize=" + mStableDisplaySize); + pw.println(" faceAuthSensorLocation=" + mFaceAuthSensorLocation); + pw.println(" fingerprintLocation=" + mFingerprintLocation); + pw.println(" udfpsBounds=" + mUdfpsBounds); + pw.println(" allFingerprintAuthenticatorsRegistered=" + + mAllFingerprintAuthenticatorsRegistered); + pw.println(" currentDialog=" + dialog); + if (dialog != null) { + dialog.dump(pw, args); + } + } + + /** + * Provides a float that represents the resolution scale(if the controller is for UDFPS). + */ + public interface ScaleFactorProvider { + /** + * Returns a float representing the scaled resolution(if the controller if for UDFPS). + */ + float provide(); } /** diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialog.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialog.java index 4ff19f6adc11..51f39b358659 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialog.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialog.java @@ -23,13 +23,15 @@ import android.hardware.biometrics.BiometricAuthenticator.Modality; import android.os.Bundle; import android.view.WindowManager; +import com.android.systemui.Dumpable; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Interface for the biometric dialog UI. */ -public interface AuthDialog { +public interface AuthDialog extends Dumpable { String KEY_CONTAINER_GOING_AWAY = "container_going_away"; String KEY_BIOMETRIC_SHOWING = "biometric_showing"; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt index 86e501670440..38fab8ffbfad 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt @@ -23,7 +23,6 @@ import android.content.Context import android.graphics.PointF import android.hardware.biometrics.BiometricFingerprintConstants import android.hardware.biometrics.BiometricSourceType -import android.util.DisplayMetrics import android.util.Log import androidx.annotation.VisibleForTesting import com.android.keyguard.KeyguardUpdateMonitor @@ -46,7 +45,6 @@ import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.Cent import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.util.ViewController -import com.android.systemui.util.leak.RotationUtils import java.io.PrintWriter import javax.inject.Inject import javax.inject.Provider @@ -127,17 +125,37 @@ class AuthRippleController @Inject constructor( } updateSensorLocation() - if (biometricSourceType == BiometricSourceType.FINGERPRINT && - fingerprintSensorLocation != null) { - mView.setFingerprintSensorLocation(fingerprintSensorLocation!!, udfpsRadius) - showUnlockedRipple() - } else if (biometricSourceType == BiometricSourceType.FACE && - faceSensorLocation != null) { - if (!bypassController.canBypass()) { + if (biometricSourceType == BiometricSourceType.FINGERPRINT) { + fingerprintSensorLocation?.let { + mView.setFingerprintSensorLocation(it, udfpsRadius) + circleReveal = CircleReveal( + it.x, + it.y, + 0f, + Math.max( + Math.max(it.x, centralSurfaces.displayWidth - it.x), + Math.max(it.y, centralSurfaces.displayHeight - it.y) + ) + ) + showUnlockedRipple() + } + } else if (biometricSourceType == BiometricSourceType.FACE) { + if (!bypassController.canBypass() && !authController.isUdfpsFingerDown) { return } - mView.setSensorLocation(faceSensorLocation!!) - showUnlockedRipple() + faceSensorLocation?.let { + mView.setSensorLocation(it) + circleReveal = CircleReveal( + it.x, + it.y, + 0f, + Math.max( + Math.max(it.x, centralSurfaces.displayWidth - it.x), + Math.max(it.y, centralSurfaces.displayHeight - it.y) + ) + ) + showUnlockedRipple() + } } } @@ -209,48 +227,8 @@ class AuthRippleController @Inject constructor( } fun updateSensorLocation() { - updateFingerprintLocation() + fingerprintSensorLocation = authController.fingerprintSensorLocation faceSensorLocation = authController.faceAuthSensorLocation - fingerprintSensorLocation?.let { - circleReveal = CircleReveal( - it.x, - it.y, - 0f, - Math.max( - Math.max(it.x, centralSurfaces.displayWidth - it.x), - Math.max(it.y, centralSurfaces.displayHeight - it.y) - ) - ) - } - } - - private fun updateFingerprintLocation() { - val displayMetrics = DisplayMetrics() - sysuiContext.display?.getRealMetrics(displayMetrics) - val width = displayMetrics.widthPixels - val height = displayMetrics.heightPixels - - authController.fingerprintSensorLocation?.let { - fingerprintSensorLocation = when (RotationUtils.getRotation(sysuiContext)) { - RotationUtils.ROTATION_LANDSCAPE -> { - val normalizedYPos: Float = it.y / width - val normalizedXPos: Float = it.x / height - PointF(width * normalizedYPos, height * (1 - normalizedXPos)) - } - RotationUtils.ROTATION_UPSIDE_DOWN -> { - PointF(width - it.x, height - it.y) - } - RotationUtils.ROTATION_SEASCAPE -> { - val normalizedYPos: Float = it.y / width - val normalizedXPos: Float = it.x / height - PointF(width * (1 - normalizedYPos), height * normalizedXPos) - } - else -> { - // ROTATION_NONE - PointF(it.x, it.y) - } - } - } } private fun updateRippleColor() { @@ -372,6 +350,7 @@ class AuthRippleController @Inject constructor( showUnlockRipple(BiometricSourceType.FINGERPRINT) } "face" -> { + // note: only shows when about to proceed to the home screen updateSensorLocation() pw.println("face ripple sensorLocation=$faceSensorLocation") showUnlockRipple(BiometricSourceType.FACE) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index 6e2dcae4728e..fb502e5b72cc 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -20,6 +20,7 @@ import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPR import static android.hardware.biometrics.BiometricOverlayConstants.REASON_AUTH_KEYGUARD; import static com.android.internal.util.Preconditions.checkNotNull; +import static com.android.systemui.classifier.Classifier.LOCK_ICON; import static com.android.systemui.classifier.Classifier.UDFPS_AUTHENTICATION; import android.annotation.NonNull; @@ -167,11 +168,16 @@ public class UdfpsController implements DozeReceiver { private final Set<Callback> mCallbacks = new HashSet<>(); @VisibleForTesting - public static final VibrationAttributes VIBRATION_ATTRIBUTES = + public static final VibrationAttributes UDFPS_VIBRATION_ATTRIBUTES = new VibrationAttributes.Builder() // vibration will bypass battery saver mode: .setUsage(VibrationAttributes.USAGE_COMMUNICATION_REQUEST) .build(); + @VisibleForTesting + public static final VibrationAttributes LOCK_ICON_VIBRATION_ATTRIBUTES = + new VibrationAttributes.Builder() + .setUsage(VibrationAttributes.USAGE_TOUCH) + .build(); // haptic to use for successful device entry public static final VibrationEffect EFFECT_CLICK = @@ -671,7 +677,7 @@ public class UdfpsController implements DozeReceiver { mContext.getOpPackageName(), EFFECT_CLICK, "udfps-onStart-click", - VIBRATION_ATTRIBUTES); + UDFPS_VIBRATION_ATTRIBUTES); } } @@ -748,7 +754,19 @@ public class UdfpsController implements DozeReceiver { } if (!mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) { + if (mFalsingManager.isFalseTouch(LOCK_ICON)) { + Log.v(TAG, "aod lock icon long-press rejected by the falsing manager."); + return; + } mKeyguardViewManager.showBouncer(true); + + // play the same haptic as the LockIconViewController longpress + mVibrator.vibrate( + Process.myUid(), + mContext.getOpPackageName(), + UdfpsController.EFFECT_CLICK, + "aod-lock-icon-longpress", + LOCK_ICON_VIBRATION_ATTRIBUTES); return; } @@ -841,6 +859,11 @@ public class UdfpsController implements DozeReceiver { mBiometricExecutor.execute(() -> { mAlternateTouchProvider.onPointerDown(requestId, x, y, minor, major); }); + mFgExecutor.execute(() -> { + if (mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) { + mKeyguardUpdateMonitor.onUdfpsPointerDown((int) requestId); + } + }); } else { mFingerprintManager.onPointerDown(requestId, mSensorId, x, y, minor, major); } @@ -856,7 +879,6 @@ public class UdfpsController implements DozeReceiver { } else { mFingerprintManager.onUiReady(requestId, mSensorId); mLatencyTracker.onActionEnd(LatencyTracker.ACTION_UDFPS_ILLUMINATE); - } }); } @@ -875,6 +897,11 @@ public class UdfpsController implements DozeReceiver { mBiometricExecutor.execute(() -> { mAlternateTouchProvider.onPointerUp(requestId); }); + mFgExecutor.execute(() -> { + if (mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) { + mKeyguardUpdateMonitor.onUdfpsPointerUp((int) requestId); + } + }); } else { mFingerprintManager.onPointerUp(requestId, mSensorId); } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java index 8de721352069..43745bf74aae 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java @@ -64,15 +64,16 @@ public class UdfpsDialogMeasureAdapter { @NonNull AuthDialog.LayoutParams onMeasureInternal( - int width, int height, @NonNull AuthDialog.LayoutParams layoutParams) { + int width, int height, @NonNull AuthDialog.LayoutParams layoutParams, + float scaleFactor) { final int displayRotation = mView.getDisplay().getRotation(); switch (displayRotation) { case Surface.ROTATION_0: - return onMeasureInternalPortrait(width, height); + return onMeasureInternalPortrait(width, height, scaleFactor); case Surface.ROTATION_90: case Surface.ROTATION_270: - return onMeasureInternalLandscape(width, height); + return onMeasureInternalLandscape(width, height, scaleFactor); default: Log.e(TAG, "Unsupported display rotation: " + displayRotation); return layoutParams; @@ -89,8 +90,16 @@ public class UdfpsDialogMeasureAdapter { return mBottomSpacerHeight; } + /** + * @return sensor diameter size as scaleFactor + */ + public int getSensorDiameter(float scaleFactor) { + return (int) (scaleFactor * mSensorProps.getLocation().sensorRadius * 2); + } + @NonNull - private AuthDialog.LayoutParams onMeasureInternalPortrait(int width, int height) { + private AuthDialog.LayoutParams onMeasureInternalPortrait(int width, int height, + float scaleFactor) { final WindowMetrics windowMetrics = mWindowManager.getMaximumWindowMetrics(); // Figure out where the bottom of the sensor anim should be. @@ -101,12 +110,12 @@ public class UdfpsDialogMeasureAdapter { final Insets navbarInsets = getNavbarInsets(windowMetrics); mBottomSpacerHeight = calculateBottomSpacerHeightForPortrait( mSensorProps, displayHeight, textIndicatorHeight, buttonBarHeight, - dialogMargin, navbarInsets.bottom); + dialogMargin, navbarInsets.bottom, scaleFactor); // Go through each of the children and do the custom measurement. int totalHeight = 0; final int numChildren = mView.getChildCount(); - final int sensorDiameter = mSensorProps.getLocation().sensorRadius * 2; + final int sensorDiameter = getSensorDiameter(scaleFactor); for (int i = 0; i < numChildren; i++) { final View child = mView.getChildAt(i); if (child.getId() == R.id.biometric_icon_frame) { @@ -176,7 +185,8 @@ public class UdfpsDialogMeasureAdapter { } @NonNull - private AuthDialog.LayoutParams onMeasureInternalLandscape(int width, int height) { + private AuthDialog.LayoutParams onMeasureInternalLandscape(int width, int height, + float scaleFactor) { final WindowMetrics windowMetrics = mWindowManager.getMaximumWindowMetrics(); // Find the spacer height needed to vertically align the icon with the sensor. @@ -197,9 +207,9 @@ public class UdfpsDialogMeasureAdapter { final int dialogMargin = getDialogMarginPx(); final int horizontalInset = navbarInsets.left + navbarInsets.right; final int horizontalSpacerWidth = calculateHorizontalSpacerWidthForLandscape( - mSensorProps, displayWidth, dialogMargin, horizontalInset); + mSensorProps, displayWidth, dialogMargin, horizontalInset, scaleFactor); - final int sensorDiameter = mSensorProps.getLocation().sensorRadius * 2; + final int sensorDiameter = getSensorDiameter(scaleFactor); final int remeasuredWidth = sensorDiameter + 2 * horizontalSpacerWidth; int remeasuredHeight = 0; @@ -281,11 +291,11 @@ public class UdfpsDialogMeasureAdapter { static int calculateBottomSpacerHeightForPortrait( @NonNull FingerprintSensorPropertiesInternal sensorProperties, int displayHeightPx, int textIndicatorHeightPx, int buttonBarHeightPx, int dialogMarginPx, - int navbarBottomInsetPx) { + int navbarBottomInsetPx, float scaleFactor) { final SensorLocationInternal location = sensorProperties.getLocation(); final int sensorDistanceFromBottom = displayHeightPx - - location.sensorLocationY - - location.sensorRadius; + - (int) (scaleFactor * location.sensorLocationY) + - (int) (scaleFactor * location.sensorRadius); final int spacerHeight = sensorDistanceFromBottom - textIndicatorHeightPx @@ -298,7 +308,8 @@ public class UdfpsDialogMeasureAdapter { + ", Distance from bottom: " + sensorDistanceFromBottom + ", Bottom margin: " + dialogMarginPx + ", Navbar bottom inset: " + navbarBottomInsetPx - + ", Bottom spacer height (portrait): " + spacerHeight); + + ", Bottom spacer height (portrait): " + spacerHeight + + ", Scale Factor: " + scaleFactor); } return spacerHeight; @@ -346,11 +357,11 @@ public class UdfpsDialogMeasureAdapter { @VisibleForTesting static int calculateHorizontalSpacerWidthForLandscape( @NonNull FingerprintSensorPropertiesInternal sensorProperties, int displayWidthPx, - int dialogMarginPx, int navbarHorizontalInsetPx) { + int dialogMarginPx, int navbarHorizontalInsetPx, float scaleFactor) { final SensorLocationInternal location = sensorProperties.getLocation(); final int sensorDistanceFromEdge = displayWidthPx - - location.sensorLocationY - - location.sensorRadius; + - (int) (scaleFactor * location.sensorLocationY) + - (int) (scaleFactor * location.sensorRadius); final int horizontalPadding = sensorDistanceFromEdge - dialogMarginPx @@ -361,7 +372,8 @@ public class UdfpsDialogMeasureAdapter { + ", Distance from edge: " + sensorDistanceFromEdge + ", Dialog margin: " + dialogMarginPx + ", Navbar horizontal inset: " + navbarHorizontalInsetPx - + ", Horizontal spacer width (landscape): " + horizontalPadding); + + ", Horizontal spacer width (landscape): " + horizontalPadding + + ", Scale Factor: " + scaleFactor); } return horizontalPadding; diff --git a/packages/SystemUI/src/com/android/systemui/decor/DecorProvider.kt b/packages/SystemUI/src/com/android/systemui/decor/DecorProvider.kt index 03ee8b11ab41..169b50edccfc 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/DecorProvider.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/DecorProvider.kt @@ -79,4 +79,16 @@ abstract class CornerDecorProvider : DecorProvider() { override val alignedBounds: List<Int> by lazy { listOf(alignedBound1, alignedBound2) } -}
\ No newline at end of file +} + +/** + * A provider for view shown on bound. + */ +abstract class BoundDecorProvider : DecorProvider() { + /** The bound which a view is aligned based on rotation 0 */ + @DisplayCutout.BoundsPosition protected abstract val alignedBound: Int + + override val alignedBounds: List<Int> by lazy { + listOf(alignedBound) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/decor/FaceScanningProviderFactory.kt b/packages/SystemUI/src/com/android/systemui/decor/FaceScanningProviderFactory.kt new file mode 100644 index 000000000000..81d3d6caebd7 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/decor/FaceScanningProviderFactory.kt @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2022 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.systemui.decor + +import android.content.Context +import android.util.Log +import android.view.DisplayCutout +import android.view.DisplayCutout.BOUNDS_POSITION_BOTTOM +import android.view.DisplayCutout.BOUNDS_POSITION_LEFT +import android.view.DisplayCutout.BOUNDS_POSITION_RIGHT +import android.view.DisplayCutout.BOUNDS_POSITION_TOP +import android.view.DisplayInfo +import android.view.Gravity +import android.view.Surface +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import com.android.keyguard.KeyguardUpdateMonitor +import com.android.systemui.FaceScanningOverlay +import com.android.systemui.biometrics.AuthController +import com.android.systemui.dagger.qualifiers.Main +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.flags.FeatureFlags +import com.android.systemui.flags.Flags +import com.android.systemui.plugins.statusbar.StatusBarStateController +import java.util.concurrent.Executor +import javax.inject.Inject + +@SysUISingleton +class FaceScanningProviderFactory @Inject constructor( + private val authController: AuthController, + private val context: Context, + private val statusBarStateController: StatusBarStateController, + private val keyguardUpdateMonitor: KeyguardUpdateMonitor, + @Main private val mainExecutor: Executor, + private val featureFlags: FeatureFlags +) : DecorProviderFactory() { + private val display = context.display + private val displayInfo = DisplayInfo() + + override val hasProviders: Boolean + get() { + if (!featureFlags.isEnabled(Flags.FACE_SCANNING_ANIM) || + authController.faceAuthSensorLocation == null) { + return false + } + + // update display info + display?.getDisplayInfo(displayInfo) ?: run { + Log.w(TAG, "display is null, can't update displayInfo") + } + return DisplayCutout.getFillBuiltInDisplayCutout( + context.resources, displayInfo.uniqueId) + } + + override val providers: List<DecorProvider> + get() { + if (!hasProviders) { + return emptyList() + } + + return ArrayList<DecorProvider>().also { list -> + // displayInfo must be updated before using it; however it will already have + // been updated when accessing the hasProviders field above + displayInfo.displayCutout?.getBoundBaseOnCurrentRotation()?.let { bounds -> + // Add a face scanning view for each screen orientation. + // Cutout drawing is updated in ScreenDecorations#updateCutout + for (bound in bounds) { + list.add( + FaceScanningOverlayProviderImpl( + bound.baseOnRotation0(displayInfo.rotation), + authController, + statusBarStateController, + keyguardUpdateMonitor, + mainExecutor + ) + ) + } + } + } + } + + fun canShowFaceScanningAnim(): Boolean { + return hasProviders && keyguardUpdateMonitor.isFaceEnrolled + } + + fun shouldShowFaceScanningAnim(): Boolean { + return canShowFaceScanningAnim() && keyguardUpdateMonitor.isFaceScanning + } +} + +class FaceScanningOverlayProviderImpl( + override val alignedBound: Int, + private val authController: AuthController, + private val statusBarStateController: StatusBarStateController, + private val keyguardUpdateMonitor: KeyguardUpdateMonitor, + private val mainExecutor: Executor +) : BoundDecorProvider() { + override val viewId: Int = com.android.systemui.R.id.face_scanning_anim + + override fun onReloadResAndMeasure( + view: View, + reloadToken: Int, + rotation: Int, + displayUniqueId: String? + ) { + (view.layoutParams as FrameLayout.LayoutParams).let { + updateLayoutParams(it, rotation) + view.layoutParams = it + } + } + + override fun inflateView( + context: Context, + parent: ViewGroup, + @Surface.Rotation rotation: Int + ): View { + val view = FaceScanningOverlay( + context, + alignedBound, + statusBarStateController, + keyguardUpdateMonitor, + mainExecutor + ) + view.id = viewId + FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT).let { + updateLayoutParams(it, rotation) + parent.addView(view, it) + } + return view + } + + private fun updateLayoutParams( + layoutParams: FrameLayout.LayoutParams, + @Surface.Rotation rotation: Int + ) { + layoutParams.let { lp -> + lp.width = ViewGroup.LayoutParams.MATCH_PARENT + lp.height = ViewGroup.LayoutParams.MATCH_PARENT + authController.faceAuthSensorLocation?.y?.let { faceAuthSensorHeight -> + val faceScanningHeight = (faceAuthSensorHeight * 2).toInt() + when (rotation) { + Surface.ROTATION_0, Surface.ROTATION_180 -> + lp.height = faceScanningHeight + Surface.ROTATION_90, Surface.ROTATION_270 -> + lp.width = faceScanningHeight + } + } + + lp.gravity = when (rotation) { + Surface.ROTATION_0 -> Gravity.TOP or Gravity.START + Surface.ROTATION_90 -> Gravity.LEFT or Gravity.START + Surface.ROTATION_180 -> Gravity.BOTTOM or Gravity.END + Surface.ROTATION_270 -> Gravity.RIGHT or Gravity.END + else -> -1 /* invalid rotation */ + } + } + } +} + +fun DisplayCutout.getBoundBaseOnCurrentRotation(): List<Int> { + return ArrayList<Int>().also { + if (!boundingRectLeft.isEmpty) { + it.add(BOUNDS_POSITION_LEFT) + } + if (!boundingRectTop.isEmpty) { + it.add(BOUNDS_POSITION_TOP) + } + if (!boundingRectRight.isEmpty) { + it.add(BOUNDS_POSITION_RIGHT) + } + if (!boundingRectBottom.isEmpty) { + it.add(BOUNDS_POSITION_BOTTOM) + } + } +} + +fun Int.baseOnRotation0(@DisplayCutout.BoundsPosition currentRotation: Int): Int { + return when (currentRotation) { + Surface.ROTATION_0 -> this + Surface.ROTATION_90 -> when (this) { + BOUNDS_POSITION_LEFT -> BOUNDS_POSITION_TOP + BOUNDS_POSITION_TOP -> BOUNDS_POSITION_RIGHT + BOUNDS_POSITION_RIGHT -> BOUNDS_POSITION_BOTTOM + else /* BOUNDS_POSITION_BOTTOM */ -> BOUNDS_POSITION_LEFT + } + Surface.ROTATION_270 -> when (this) { + BOUNDS_POSITION_LEFT -> BOUNDS_POSITION_BOTTOM + BOUNDS_POSITION_TOP -> BOUNDS_POSITION_LEFT + BOUNDS_POSITION_RIGHT -> BOUNDS_POSITION_TOP + else /* BOUNDS_POSITION_BOTTOM */ -> BOUNDS_POSITION_RIGHT + } + else /* Surface.ROTATION_180 */ -> when (this) { + BOUNDS_POSITION_LEFT -> BOUNDS_POSITION_RIGHT + BOUNDS_POSITION_TOP -> BOUNDS_POSITION_BOTTOM + BOUNDS_POSITION_RIGHT -> BOUNDS_POSITION_LEFT + else /* BOUNDS_POSITION_BOTTOM */ -> BOUNDS_POSITION_TOP + } + } +} + +private const val TAG = "FaceScanningProvider" diff --git a/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt b/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt index 136f135af759..9f624b3dcb09 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt @@ -28,6 +28,10 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import javax.inject.Inject +/** + * Provides privacy dot views for each orientation. The PrivacyDot orientation and visibility + * of the privacy dot views are controlled by the PrivacyDotViewController. + */ @SysUISingleton class PrivacyDotDecorProviderFactory @Inject constructor( @Main private val res: Resources diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java index c8720e409883..da6c163b1eea 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java @@ -183,7 +183,8 @@ public class DozeSensors { mSensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION), null /* setting */, dozeParameters.getPulseOnSigMotion(), - DozeLog.PULSE_REASON_SENSOR_SIGMOTION, false /* touchCoords */, + DozeLog.PULSE_REASON_SENSOR_SIGMOTION, + false /* touchCoords */, false /* touchscreen */), new TriggerSensor( mSensorManager.getDefaultSensor(Sensor.TYPE_PICK_UP_GESTURE), @@ -193,7 +194,8 @@ public class DozeSensors { DozeLog.REASON_SENSOR_PICKUP, false /* touchCoords */, false /* touchscreen */, false /* ignoresSetting */, - false /* requires prox */), + false /* requires prox */, + true /* immediatelyReRegister */), new TriggerSensor( findSensor(config.doubleTapSensorType()), Settings.Secure.DOZE_DOUBLE_TAP_GESTURE, @@ -211,6 +213,7 @@ public class DozeSensors { true /* touchscreen */, false /* ignoresSetting */, dozeParameters.singleTapUsesProx(mDevicePosture) /* requiresProx */, + true /* immediatelyReRegister */, mDevicePosture), new TriggerSensor( findSensor(config.longPressSensorType()), @@ -221,7 +224,8 @@ public class DozeSensors { true /* reports touch coordinates */, true /* touchscreen */, false /* ignoresSetting */, - dozeParameters.longPressUsesProx() /* requiresProx */), + dozeParameters.longPressUsesProx() /* requiresProx */, + true /* immediatelyReRegister */), new TriggerSensor( findSensor(config.udfpsLongPressSensorType()), "doze_pulse_on_auth", @@ -231,7 +235,8 @@ public class DozeSensors { true /* reports touch coordinates */, true /* touchscreen */, false /* ignoresSetting */, - dozeParameters.longPressUsesProx()), + dozeParameters.longPressUsesProx(), + false /* immediatelyReRegister */), new PluginSensor( new SensorManagerPlugin.Sensor(TYPE_WAKE_DISPLAY), Settings.Secure.DOZE_WAKE_DISPLAY_GESTURE, @@ -257,7 +262,8 @@ public class DozeSensors { false /* requiresTouchCoordinates */, false /* requiresTouchscreen */, false /* ignoresSetting */, - false /* requiresProx */), + false /* requiresProx */, + true /* immediatelyReRegister */), }; setProxListening(false); // Don't immediately start listening when we register. mProximitySensor.register( @@ -493,6 +499,10 @@ public class DozeSensors { private final boolean mRequiresTouchscreen; private final boolean mRequiresProx; + // Whether to immediately re-register this sensor after the sensor is triggered. + // If false, the sensor registration will be updated on the next AOD state transition. + private final boolean mImmediatelyReRegister; + protected boolean mRequested; protected boolean mRegistered; protected boolean mDisabled; @@ -516,7 +526,8 @@ public class DozeSensors { reportsTouchCoordinates, requiresTouchscreen, false /* ignoresSetting */, - false /* requiresProx */ + false /* requiresProx */, + true /* immediatelyReRegister */ ); } @@ -529,7 +540,8 @@ public class DozeSensors { boolean reportsTouchCoordinates, boolean requiresTouchscreen, boolean ignoresSetting, - boolean requiresProx + boolean requiresProx, + boolean immediatelyReRegister ) { this( new Sensor[]{ sensor }, @@ -541,6 +553,7 @@ public class DozeSensors { requiresTouchscreen, ignoresSetting, requiresProx, + immediatelyReRegister, DevicePostureController.DEVICE_POSTURE_UNKNOWN ); } @@ -555,6 +568,7 @@ public class DozeSensors { boolean requiresTouchscreen, boolean ignoresSetting, boolean requiresProx, + boolean immediatelyReRegister, @DevicePostureController.DevicePostureInt int posture ) { mSensors = sensors; @@ -567,6 +581,7 @@ public class DozeSensors { mIgnoresSetting = ignoresSetting; mRequiresProx = requiresProx; mPosture = posture; + mImmediatelyReRegister = immediatelyReRegister; } /** @@ -702,8 +717,8 @@ public class DozeSensors { screenY = event.values[1]; } mSensorCallback.onSensorPulse(mPulseReason, screenX, screenY, event.values); - if (!mRegistered) { - updateListening(); // reregister, this sensor only fires once + if (!mRegistered && mImmediatelyReRegister) { + updateListening(); } })); } diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.java b/packages/SystemUI/src/com/android/systemui/flags/Flags.java index c43dd9041a50..2c798307c196 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Flags.java +++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.java @@ -80,6 +80,9 @@ public class Flags { public static final ResourceBooleanFlag BOUNCER_USER_SWITCHER = new ResourceBooleanFlag(204, R.bool.config_enableBouncerUserSwitcher); + public static final ResourceBooleanFlag FACE_SCANNING_ANIM = + new ResourceBooleanFlag(205, R.bool.config_enableFaceScanningAnimation); + /***************************************/ // 300 - power menu public static final BooleanFlag POWER_MENU_LITE = diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt index c686b48278a3..5ffc3f101c6f 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt @@ -169,7 +169,8 @@ class KeyguardUnlockAnimationController @Inject constructor( playingCannedAnimation: Boolean, fromWakeAndUnlock: Boolean, unlockAnimationStartDelay: Long, - unlockAnimationDuration: Long) {} + unlockAnimationDuration: Long + ) {} /** * Called when the remote unlock animation ends, in all cases, canned or swipe-to-unlock. @@ -308,8 +309,12 @@ class KeyguardUnlockAnimationController @Inject constructor( // call onKeyguardExitRemoteAnimationFinished since that will hide the keyguard // and unlock the device as well as hiding the surface. if (surfaceBehindAlpha == 0f) { + Log.d(TAG, "surfaceBehindAlphaAnimator#onAnimationEnd") keyguardViewMediator.get().finishSurfaceBehindRemoteAnimation( false /* cancelled */) + } else { + Log.d(TAG, "skip finishSurfaceBehindRemoteAnimation" + + " surfaceBehindAlpha=$surfaceBehindAlpha") } } }) @@ -325,6 +330,7 @@ class KeyguardUnlockAnimationController @Inject constructor( } addListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator) { + Log.d(TAG, "surfaceBehindEntryAnimator#onAnimationEnd") playingCannedUnlockAnimation = false keyguardViewMediator.get().onKeyguardExitRemoteAnimationFinished( false /* cancelled */ @@ -361,7 +367,6 @@ class KeyguardUnlockAnimationController @Inject constructor( // the animations since they won't be visible. !notificationShadeWindowController.isLaunchingActivity && launcherUnlockController != null && - !keyguardStateController.isDismissingFromSwipe && // Temporarily disable for foldables since foldable launcher has two first pages, // which breaks the in-window animation. !isFoldable(context) @@ -372,8 +377,8 @@ class KeyguardUnlockAnimationController @Inject constructor( * changed. */ override fun onKeyguardGoingAwayChanged() { - if (keyguardStateController.isKeyguardGoingAway - && !statusBarStateController.leaveOpenOnKeyguardHide()) { + if (keyguardStateController.isKeyguardGoingAway && + !statusBarStateController.leaveOpenOnKeyguardHide()) { prepareForInWindowLauncherAnimations() } } @@ -427,7 +432,7 @@ class KeyguardUnlockAnimationController @Inject constructor( launcherUnlockController?.prepareForUnlock( willUnlockWithSmartspaceTransition, /* willAnimateSmartspace */ lockscreenSmartspaceBounds, /* lockscreenSmartspaceBounds */ - selectedPage, /* selectedPage */ + selectedPage /* selectedPage */ ) } catch (e: RemoteException) { Log.e(TAG, "Remote exception in prepareForInWindowUnlockAnimations.", e) @@ -466,16 +471,34 @@ class KeyguardUnlockAnimationController @Inject constructor( // If we specifically requested that the surface behind be made visible (vs. it being made // visible because we're unlocking), then we're in the middle of a swipe-to-unlock touch - // gesture and the surface behind the keyguard should be made visible. + // gesture and the surface behind the keyguard should be made visible so that we can animate + // it in. if (requestedShowSurfaceBehindKeyguard) { - // Fade in the surface, as long as we're not now flinging. The touch gesture ending in - // a fling during the time it takes the keyguard exit animation to start is an edge - // case race condition, and we'll handle it by playing a canned animation on the - // now-visible surface to finish unlocking. - if (!keyguardStateController.isFlingingToDismissKeyguard) { - fadeInSurfaceBehind() - } else { + + // If we're flinging to dismiss here, it means the touch gesture ended in a fling during + // the time it takes the keyguard exit animation to start. This is an edge case race + // condition, which we handle by just playing a canned animation on the now-visible + // surface behind the keyguard to finish unlocking. + if (keyguardStateController.isFlingingToDismissKeyguard) { playCannedUnlockAnimation() + } else if (keyguardStateController.isDismissingFromSwipe + && willUnlockWithInWindowLauncherAnimations) { + // If we're swiping to unlock to the Launcher, and can play in-window animations, + // make the launcher surface fully visible and play the in-window unlock animation + // on the launcher icons. System UI will remain locked, using the swipe-to-unlock + // translation logic on the launcher window, until the swipe gesture ends (either in + // a successful unlock, or an aborted unlock). + surfaceBehindAlpha = 1f + setSurfaceBehindAppearAmount(1f) + + launcherUnlockController?.playUnlockAnimation( + true, + UNLOCK_ANIMATION_DURATION_MS + CANNED_UNLOCK_START_DELAY, + 0 /* startDelay */) + } else { + // Otherwise, we're swiping in an app and should just fade it in. The swipe gesture + // will translate it until the end of the swipe gesture. + fadeInSurfaceBehind() } } else { // The surface was made visible since we're unlocking not from a swipe (fingerprint, @@ -502,19 +525,23 @@ class KeyguardUnlockAnimationController @Inject constructor( * by the dismiss amount via [onKeyguardDismissAmountChanged]. */ private fun playCannedUnlockAnimation() { + Log.d(TAG, "playCannedUnlockAnimation") playingCannedUnlockAnimation = true - when { // If we're set up for in-window launcher animations, ask Launcher to play its in-window // canned animation. - willUnlockWithInWindowLauncherAnimations -> unlockToLauncherWithInWindowAnimations() + willUnlockWithInWindowLauncherAnimations -> { + Log.d(TAG, "playCannedUnlockAnimation, unlockToLauncherWithInWindowAnimations") + unlockToLauncherWithInWindowAnimations() + } // If we're waking and unlocking to a non-Launcher app surface (or Launcher in-window // animations are not available), show it immediately and end the remote animation. The // circular light reveal will show the app surface, and it looks weird if it's moving // around behind that. biometricUnlockControllerLazy.get().isWakeAndUnlock -> { + Log.d(TAG, "playCannedUnlockAnimation, isWakeAndUnlock") setSurfaceBehindAppearAmount(1f) keyguardViewMediator.get().onKeyguardExitRemoteAnimationFinished( false /* cancelled */) @@ -522,7 +549,10 @@ class KeyguardUnlockAnimationController @Inject constructor( // Otherwise, we're doing a normal full-window unlock. Start this animator, which will // scale/translate the window underneath the lockscreen. - else -> surfaceBehindEntryAnimator.start() + else -> { + Log.d(TAG, "playCannedUnlockAnimation, surfaceBehindEntryAnimator#start") + surfaceBehindEntryAnimator.start() + } } } @@ -687,10 +717,18 @@ class KeyguardUnlockAnimationController @Inject constructor( // Otherwise, animate in the surface's scale/transltion. val surfaceHeight: Int = surfaceBehindRemoteAnimationTarget!!.screenSpaceBounds.height() - val scaleFactor = (SURFACE_BEHIND_START_SCALE_FACTOR + + + var scaleFactor = (SURFACE_BEHIND_START_SCALE_FACTOR + (1f - SURFACE_BEHIND_START_SCALE_FACTOR) * MathUtils.clamp(amount, 0f, 1f)) + // If we're dismissing via swipe to the Launcher, we'll play in-window scale animations, so + // don't also scale the window. + if (keyguardStateController.isDismissingFromSwipe + && willUnlockWithInWindowLauncherAnimations) { + scaleFactor = 1f + } + // Scale up from a point at the center-bottom of the surface. surfaceBehindMatrix.setScale( scaleFactor, @@ -774,16 +812,17 @@ class KeyguardUnlockAnimationController @Inject constructor( } private fun fadeInSurfaceBehind() { + Log.d(TAG, "fadeInSurfaceBehind") surfaceBehindAlphaAnimator.cancel() surfaceBehindAlphaAnimator.start() } private fun fadeOutSurfaceBehind() { + Log.d(TAG, "fadeOutSurfaceBehind") surfaceBehindAlphaAnimator.cancel() surfaceBehindAlphaAnimator.reverse() } - private fun shouldPerformSmartspaceTransition(): Boolean { // Feature is disabled, so we don't want to. if (!featureFlags.isEnabled(Flags.SMARTSPACE_SHARED_ELEMENT_TRANSITION_ENABLED)) { @@ -837,6 +876,12 @@ class KeyguardUnlockAnimationController @Inject constructor( return false } + // If we're swiping to dismiss, the smartspace will be swiped off the top of the screen + // so we can't shared element animate it. + if (keyguardStateController.isDismissingFromSwipe) { + return false + } + // We don't do the shared element on tablets because they're large and the smartspace has to // fly across large distances, which is distracting. if (Utilities.isTablet(context)) { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 0783eeec176f..f9b8ce28533b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -635,13 +635,13 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, case TelephonyManager.SIM_STATE_PUK_REQUIRED: synchronized (KeyguardViewMediator.this) { mSimWasLocked.append(slotId, true); + mPendingPinLock = true; if (!mShowing) { if (DEBUG_SIM_STATES) Log.d(TAG, "INTENT_VALUE_ICC_LOCKED and keygaurd isn't " + "showing; need to show keyguard so user can enter sim pin"); doKeyguardLocked(null); } else { - mPendingPinLock = true; resetStateLocked(); } } @@ -2424,7 +2424,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, RemoteAnimationTarget[] apps, RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, IRemoteAnimationFinishedCallback finishedCallback) { Trace.beginSection("KeyguardViewMediator#handleStartKeyguardExitAnimation"); - if (DEBUG) Log.d(TAG, "handleStartKeyguardExitAnimation startTime=" + startTime + Log.d(TAG, "handleStartKeyguardExitAnimation startTime=" + startTime + " fadeoutDuration=" + fadeoutDuration); synchronized (KeyguardViewMediator.this) { @@ -2620,7 +2620,11 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, * @param cancelled {@code true} if the animation was cancelled before it finishes. */ public void onKeyguardExitRemoteAnimationFinished(boolean cancelled) { + Log.d(TAG, "onKeyguardExitRemoteAnimationFinished"); if (!mSurfaceBehindRemoteAnimationRunning && !mSurfaceBehindRemoteAnimationRequested) { + Log.d(TAG, "skip onKeyguardExitRemoteAnimationFinished cancelled=" + cancelled + + " surfaceAnimationRunning=" + mSurfaceBehindRemoteAnimationRunning + + " surfaceAnimationRequested=" + mSurfaceBehindRemoteAnimationRequested); return; } @@ -2634,7 +2638,13 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, onKeyguardExitFinished(); if (mKeyguardStateController.isDismissingFromSwipe() || wasShowing) { + Log.d(TAG, "onKeyguardExitRemoteAnimationFinished" + + "#hideKeyguardViewAfterRemoteAnimation"); mKeyguardUnlockAnimationControllerLazy.get().hideKeyguardViewAfterRemoteAnimation(); + } else { + Log.d(TAG, "skip hideKeyguardViewAfterRemoteAnimation" + + " dismissFromSwipe=" + mKeyguardStateController.isDismissingFromSwipe() + + " wasShowing=" + wasShowing); } finishSurfaceBehindRemoteAnimation(cancelled); @@ -2682,7 +2692,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, /** Hides the surface behind the keyguard by re-showing the keyguard/activity lock screen. */ public void hideSurfaceBehindKeyguard() { mSurfaceBehindRemoteAnimationRequested = false; - + mKeyguardStateController.notifyKeyguardGoingAway(false); if (mShowing) { setShowingLocked(true, true); } @@ -2974,6 +2984,7 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, pw.print(" mPendingReset: "); pw.println(mPendingReset); pw.print(" mPendingLock: "); pw.println(mPendingLock); pw.print(" wakeAndUnlocking: "); pw.println(mWakeAndUnlocking); + pw.print(" mPendingPinLock: "); pw.println(mPendingPinLock); } /** diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt index 54b0c1345601..7cc52e428218 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt @@ -106,6 +106,7 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>( PowerManager.WAKE_REASON_APPLICATION, "com.android.systemui:media_tap_to_transfer_activated" ) + animateChipIn(currentChipView) } // Cancel and re-set the chip timeout each time we get a new state. @@ -138,6 +139,12 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>( abstract fun updateChipView(chipInfo: T, currentChipView: ViewGroup) /** + * A method that can be implemented by subclcasses to do custom animations for when the chip + * appears. + */ + open fun animateChipIn(chipView: ViewGroup) {} + + /** * Returns the size that the icon should be, or null if no size override is needed. */ open fun getIconSize(isAppIcon: Boolean): Int? = null diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt index 9f5ec7e1a330..54b4380e2443 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt @@ -27,6 +27,8 @@ import android.view.WindowManager import android.widget.TextView import com.android.internal.statusbar.IUndoMediaTransferCallback import com.android.systemui.R +import com.android.systemui.animation.Interpolators +import com.android.systemui.animation.ViewHierarchyAnimator import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.media.taptotransfer.common.ChipInfoCommon @@ -124,7 +126,6 @@ class MediaTttChipControllerSender @Inject constructor( currentChipView.requireViewById<View>(R.id.loading).visibility = chipState.isMidTransfer.visibleIfTrue() - // Undo val undoView = currentChipView.requireViewById<View>(R.id.undo) val undoClickListener = chipState.undoClickListener( @@ -138,6 +139,17 @@ class MediaTttChipControllerSender @Inject constructor( chipState.isTransferFailure.visibleIfTrue() } + override fun animateChipIn(chipView: ViewGroup) { + ViewHierarchyAnimator.animateAddition( + chipView.requireViewById<ViewGroup>(R.id.media_ttt_sender_chip_inner), + ViewHierarchyAnimator.Hotspot.TOP, + Interpolators.EMPHASIZED_DECELERATE, + duration = 500L, + includeMargins = true, + includeFadeIn = true, + ) + } + override fun removeChip(removalReason: String) { // Don't remove the chip if we're mid-transfer since the user should still be able to // see the status of the transfer. (But do remove it if it's finally timed out.) diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java index fcd9e10089bc..bf83ad6bff74 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java @@ -110,6 +110,11 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D private Context mUserContext; private UserTracker mUserTracker; private SecureSettings mSecureSettings; + // Keep track of whether mTilesList contains the same information as the Settings value. + // This is a performance optimization to reduce the number of blocking calls to Settings from + // main thread. + // This is enforced by only cleaning the flag at the end of a successful run of #onTuningChanged + private boolean mTilesListDirty = true; private final TileServiceRequestController mTileServiceRequestController; private TileLifecycleManager.Factory mTileLifeCycleManagerFactory; @@ -374,6 +379,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D // the ones that are in the setting, update the Setting. saveTilesToSettings(mTileSpecs); } + mTilesListDirty = false; for (int i = 0; i < mCallbacks.size(); i++) { mCallbacks.get(i).onTilesChanged(); } @@ -437,6 +443,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D } + // When calling this, you may want to modify mTilesListDirty accordingly. @MainThread private void saveTilesToSettings(List<String> tileSpecs) { mSecureSettings.putStringForUser(TILES_SETTING, TextUtils.join(",", tileSpecs), @@ -446,9 +453,15 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D @MainThread private void changeTileSpecs(Predicate<List<String>> changeFunction) { - final String setting = mSecureSettings.getStringForUser(TILES_SETTING, mCurrentUser); - final List<String> tileSpecs = loadTileSpecs(mContext, setting); + final List<String> tileSpecs; + if (!mTilesListDirty) { + tileSpecs = new ArrayList<>(mTileSpecs); + } else { + tileSpecs = loadTileSpecs(mContext, + mSecureSettings.getStringForUser(TILES_SETTING, mCurrentUser)); + } if (changeFunction.test(tileSpecs)) { + mTilesListDirty = true; saveTilesToSettings(tileSpecs); } } @@ -508,6 +521,7 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D } } if (DEBUG) Log.d(TAG, "saveCurrentTiles " + newTiles); + mTilesListDirty = true; saveTilesToSettings(newTiles); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 1fb771ef2991..9e029095ea6b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -50,6 +50,7 @@ import android.hardware.biometrics.BiometricSourceType; import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.os.BatteryManager; +import android.os.Build; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -61,6 +62,7 @@ import android.text.format.Formatter; import android.util.Log; import android.view.View; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityManager; import androidx.annotation.Nullable; @@ -93,6 +95,8 @@ import com.android.systemui.util.wakelock.WakeLock; import java.io.PrintWriter; import java.text.NumberFormat; +import java.util.HashSet; +import java.util.Set; import javax.inject.Inject; @@ -113,12 +117,12 @@ public class KeyguardIndicationController { private static final String TAG = "KeyguardIndication"; private static final boolean DEBUG_CHARGING_SPEED = false; + private static final boolean DEBUG = Build.IS_DEBUGGABLE; private static final int MSG_HIDE_TRANSIENT = 1; private static final int MSG_SHOW_ACTION_TO_UNLOCK = 2; private static final int MSG_HIDE_BIOMETRIC_MESSAGE = 3; private static final long TRANSIENT_BIOMETRIC_ERROR_TIMEOUT = 1300; - private static final float BOUNCE_ANIMATION_FINAL_Y = 0f; private final Context mContext; private final BroadcastDispatcher mBroadcastDispatcher; @@ -139,6 +143,7 @@ public class KeyguardIndicationController { private final IActivityManager mIActivityManager; private final FalsingManager mFalsingManager; private final KeyguardBypassController mKeyguardBypassController; + private final AccessibilityManager mAccessibilityManager; private final Handler mHandler; protected KeyguardIndicationRotateTextViewController mRotateTextViewController; @@ -167,6 +172,7 @@ public class KeyguardIndicationController { private boolean mBatteryPresent = true; private long mChargingTimeRemaining; private String mMessageToShowOnScreenOn; + private final Set<Integer> mCoExFaceHelpMsgIdsToShow; private boolean mInited; private KeyguardUpdateMonitorCallback mUpdateMonitorCallback; @@ -214,7 +220,8 @@ public class KeyguardIndicationController { LockPatternUtils lockPatternUtils, ScreenLifecycle screenLifecycle, IActivityManager iActivityManager, - KeyguardBypassController keyguardBypassController) { + KeyguardBypassController keyguardBypassController, + AccessibilityManager accessibilityManager) { mContext = context; mBroadcastDispatcher = broadcastDispatcher; mDevicePolicyManager = devicePolicyManager; @@ -232,9 +239,17 @@ public class KeyguardIndicationController { mIActivityManager = iActivityManager; mFalsingManager = falsingManager; mKeyguardBypassController = keyguardBypassController; + mAccessibilityManager = accessibilityManager; mScreenLifecycle = screenLifecycle; mScreenLifecycle.addObserver(mScreenObserver); + mCoExFaceHelpMsgIdsToShow = new HashSet<>(); + int[] msgIds = context.getResources().getIntArray( + com.android.systemui.R.array.config_face_help_msgs_when_fingerprint_enrolled); + for (int msgId : msgIds) { + mCoExFaceHelpMsgIdsToShow.add(msgId); + } + mHandler = new Handler(mainLooper) { @Override public void handleMessage(Message msg) { @@ -885,7 +900,9 @@ public class KeyguardIndicationController { mStatusBarKeyguardViewManager.showBouncerMessage(message, mInitialTextColorState); } } else { - if (mKeyguardUpdateMonitor.isUdfpsSupported() + if (!mAccessibilityManager.isEnabled() + && !mAccessibilityManager.isTouchExplorationEnabled() + && mKeyguardUpdateMonitor.isUdfpsSupported() && mKeyguardUpdateMonitor.getUserCanSkipBouncer( KeyguardUpdateMonitor.getCurrentUser())) { final int stringId = mKeyguardUpdateMonitor.getIsFaceAuthenticated() @@ -898,15 +915,6 @@ public class KeyguardIndicationController { } } - private void showFaceFailedTryFingerprintMsg(int msgId, String a11yString) { - showBiometricMessage(R.string.keyguard_face_failed_use_fp); - - // Although we suppress face auth errors visually, we still announce them for a11y - if (!TextUtils.isEmpty(a11yString)) { - mLockScreenIndicationView.announceForAccessibility(a11yString); - } - } - public void dump(PrintWriter pw, String[] args) { pw.println("KeyguardIndicationController:"); pw.println(" mInitialTextColorState: " + mInitialTextColorState); @@ -925,6 +933,7 @@ public class KeyguardIndicationController { mTopIndicationView == null ? null : mTopIndicationView.getText())); pw.println(" computePowerIndication(): " + computePowerIndication()); pw.println(" trustGrantedIndication: " + getTrustGrantedIndication()); + pw.println(" mCoExFaceHelpMsgIdsToShow=" + mCoExFaceHelpMsgIdsToShow); mRotateTextViewController.dump(pw, args); } @@ -983,9 +992,20 @@ public class KeyguardIndicationController { .isUnlockingWithBiometricAllowed(true /* isStrongBiometric */)) { return; } + boolean showActionToUnlock = msgId == KeyguardUpdateMonitor.BIOMETRIC_HELP_FACE_NOT_RECOGNIZED; - if (mStatusBarKeyguardViewManager.isBouncerShowing()) { + if (biometricSourceType == BiometricSourceType.FACE + && !showActionToUnlock + && mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( + KeyguardUpdateMonitor.getCurrentUser()) + && !mCoExFaceHelpMsgIdsToShow.contains(msgId)) { + if (DEBUG) { + Log.d(TAG, "skip showing msgId=" + msgId + " helpString=" + helpString + + ", due to co-ex logic"); + } + return; + } else if (mStatusBarKeyguardViewManager.isBouncerShowing()) { mStatusBarKeyguardViewManager.showBouncerMessage(helpString, mInitialTextColorState); } else if (mScreenLifecycle.getScreenState() == SCREEN_ON) { @@ -1002,14 +1022,28 @@ public class KeyguardIndicationController { if (shouldSuppressBiometricError(msgId, biometricSourceType, mKeyguardUpdateMonitor)) { return; } - if (msgId == FaceManager.FACE_ERROR_TIMEOUT) { + + if (biometricSourceType == BiometricSourceType.FACE + && msgId == FaceManager.FACE_ERROR_UNABLE_TO_PROCESS) { + // suppress all face UNABLE_TO_PROCESS errors + if (DEBUG) { + Log.d(TAG, "skip showing FACE_ERROR_UNABLE_TO_PROCESS errString=" + + errString); + } + } else if (biometricSourceType == BiometricSourceType.FACE + && msgId == FaceManager.FACE_ERROR_TIMEOUT) { + if (mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( + KeyguardUpdateMonitor.getCurrentUser())) { + // no message if fingerprint is also enrolled + if (DEBUG) { + Log.d(TAG, "skip showing FACE_ERROR_TIMEOUT due to co-ex logic"); + } + return; + } + // The face timeout message is not very actionable, let's ask the user to // manually retry. - if (!mStatusBarKeyguardViewManager.isBouncerShowing() - && mKeyguardUpdateMonitor.isUdfpsEnrolled() - && mKeyguardUpdateMonitor.isFingerprintDetectionRunning()) { - showFaceFailedTryFingerprintMsg(msgId, errString); - } else if (mStatusBarKeyguardViewManager.isShowingAlternateAuth()) { + if (mStatusBarKeyguardViewManager.isShowingAlternateAuth()) { mStatusBarKeyguardViewManager.showBouncerMessage( mContext.getResources().getString(R.string.keyguard_try_fingerprint), mInitialTextColorState diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java index 76f9db44af66..1ce05ec7e7ad 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java @@ -736,12 +736,10 @@ public class NotificationMediaManager implements Dumpable { } boolean cannotAnimateDoze = mStatusBarStateController.isDozing() && !ScrimState.AOD.getAnimateChange(); - boolean needsBypassFading = mKeyguardStateController.isBypassFadingAnimation(); if (((mBiometricUnlockController != null && mBiometricUnlockController.getMode() == BiometricUnlockController.MODE_WAKE_AND_UNLOCK_PULSING - || cannotAnimateDoze) && !needsBypassFading) + || cannotAnimateDoze)) || hideBecauseOccluded) { - // We are unlocking directly - no animation! mBackdrop.setVisibility(View.GONE); mBackdropBack.setImageDrawable(null); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt index 4f27fb4a9661..d88f07ca304c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt @@ -195,7 +195,6 @@ class PrivacyDotViewController @Inject constructor( @UiThread private fun showDotView(dot: View, animate: Boolean) { - showingListener?.onPrivacyDotShown(dot) dot.clearAnimation() if (animate) { dot.visibility = View.VISIBLE @@ -209,6 +208,7 @@ class PrivacyDotViewController @Inject constructor( dot.visibility = View.VISIBLE dot.alpha = 1f } + showingListener?.onPrivacyDotShown(dot) } // Update the gravity and margins of the privacy views diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java index 577d536262b2..755e3e1a208e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java @@ -151,6 +151,10 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView R.color.notification_ripple_tinted_color); mNormalRippleColor = mContext.getColor( R.color.notification_ripple_untinted_color); + // Reset background color tint and override tint, as they are from an old theme + mBgTint = NO_COLOR; + mOverrideTint = NO_COLOR; + mOverrideAmount = 0.0f; } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java index eb496abad460..26614ff4ae58 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java @@ -141,7 +141,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView public static final float DEFAULT_HEADER_VISIBLE_AMOUNT = 1.0f; private static final long RECENTLY_ALERTED_THRESHOLD_MS = TimeUnit.SECONDS.toMillis(30); - private boolean mUpdateBackgroundOnUpdate; + // We don't correctly track dark mode until the content views are inflated, so always update + // the background on first content update just in case it happens to be during a theme change. + private boolean mUpdateBackgroundOnUpdate = true; private boolean mNotificationTranslationFinished = false; private boolean mIsSnoozed; private boolean mIsFaded; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java index a552f999aeb4..a76f0827fc18 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java @@ -1312,6 +1312,7 @@ public class NotificationChildrenContainer extends ViewGroup } float bottomRoundness = last ? currentBottomRoundness : 0.0f; child.setBottomRoundness(bottomRoundness, isShown() /* animate */); + child.setTopRoundness(0.0f, false /* animate */); last = false; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java index e946bf1bb238..39620ac23117 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java @@ -27,8 +27,11 @@ import android.hardware.fingerprint.FingerprintManager; import android.metrics.LogMaker; import android.os.Handler; import android.os.PowerManager; +import android.os.Process; import android.os.SystemClock; import android.os.Trace; +import android.os.VibrationAttributes; +import android.os.VibrationEffect; import android.util.Log; import androidx.annotation.Nullable; @@ -61,6 +64,7 @@ import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.policy.KeyguardStateController; import java.io.PrintWriter; @@ -83,6 +87,12 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp private static final String BIOMETRIC_WAKE_LOCK_NAME = "wake-and-unlock:wakelock"; private static final UiEventLogger UI_EVENT_LOGGER = new UiEventLoggerImpl(); private static final int FP_ATTEMPTS_BEFORE_SHOW_BOUNCER = 2; + private static final VibrationEffect SUCCESS_VIBRATION_EFFECT = + VibrationEffect.get(VibrationEffect.EFFECT_CLICK); + private static final VibrationEffect ERROR_VIBRATION_EFFECT = + VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK); + private static final VibrationAttributes HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES = + VibrationAttributes.createForUsage(VibrationAttributes.USAGE_HARDWARE_FEEDBACK); @IntDef(prefix = { "MODE_" }, value = { MODE_NONE, @@ -91,7 +101,6 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp MODE_SHOW_BOUNCER, MODE_ONLY_WAKE, MODE_UNLOCK_COLLAPSING, - MODE_UNLOCK_FADING, MODE_DISMISS_BOUNCER, MODE_WAKE_AND_UNLOCK_FROM_DREAM }) @@ -138,15 +147,9 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp public static final int MODE_WAKE_AND_UNLOCK_FROM_DREAM = 6; /** - * Faster mode of dismissing the lock screen when we cross fade to an app - * (used for keyguard bypass.) - */ - public static final int MODE_UNLOCK_FADING = 7; - - /** * When bouncer is visible and will be dismissed. */ - public static final int MODE_DISMISS_BOUNCER = 8; + public static final int MODE_DISMISS_BOUNCER = 7; /** * How much faster we collapse the lockscreen when authenticating with biometric. @@ -165,6 +168,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp private final NotificationShadeWindowController mNotificationShadeWindowController; private final SessionTracker mSessionTracker; private final int mConsecutiveFpFailureThreshold; + private final boolean mShouldVibrate; private int mMode; private BiometricSourceType mBiometricType; private KeyguardViewController mKeyguardViewController; @@ -181,6 +185,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp private final AuthController mAuthController; private final StatusBarStateController mStatusBarStateController; private final LatencyTracker mLatencyTracker; + private final VibratorHelper mVibratorHelper; private long mLastFpFailureUptimeMillis; private int mNumConsecutiveFpFailures; @@ -285,7 +290,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp KeyguardUnlockAnimationController keyguardUnlockAnimationController, SessionTracker sessionTracker, LatencyTracker latencyTracker, - ScreenOffAnimationController screenOffAnimationController) { + ScreenOffAnimationController screenOffAnimationController, + VibratorHelper vibrator) { mPowerManager = powerManager; mShadeController = shadeController; mUpdateMonitor = keyguardUpdateMonitor; @@ -304,6 +310,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp mHandler = handler; mConsecutiveFpFailureThreshold = resources.getInteger( R.integer.fp_consecutive_failure_time_ms); + mShouldVibrate = !(resources.getBoolean( + com.android.internal.R.bool.system_server_plays_face_haptics)); mKeyguardBypassController = keyguardBypassController; mKeyguardBypassController.setUnlockController(this); mMetricsLogger = metricsLogger; @@ -312,6 +320,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp mKeyguardUnlockAnimationController = keyguardUnlockAnimationController; mSessionTracker = sessionTracker; mScreenOffAnimationController = screenOffAnimationController; + mVibratorHelper = vibrator; + dumpManager.registerDumpable(getClass().getName(), this); } @@ -414,8 +424,14 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp } public void startWakeAndUnlock(BiometricSourceType biometricSourceType, - boolean isStrongBiometric) { - startWakeAndUnlock(calculateMode(biometricSourceType, isStrongBiometric)); + boolean isStrongBiometric) { + int mode = calculateMode(biometricSourceType, isStrongBiometric); + if (BiometricSourceType.FACE == biometricSourceType && (mode == MODE_WAKE_AND_UNLOCK + || mode == MODE_WAKE_AND_UNLOCK_PULSING || mode == MODE_UNLOCK_COLLAPSING + || mode == MODE_WAKE_AND_UNLOCK_FROM_DREAM || mode == MODE_DISMISS_BOUNCER)) { + vibrateSuccess(); + } + startWakeAndUnlock(mode); } public void startWakeAndUnlock(@WakeAndUnlockMode int mode) { @@ -451,8 +467,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp } switch (mMode) { case MODE_DISMISS_BOUNCER: - case MODE_UNLOCK_FADING: - Trace.beginSection("MODE_DISMISS_BOUNCER or MODE_UNLOCK_FADING"); + Trace.beginSection("MODE_DISMISS_BOUNCER"); mKeyguardViewController.notifyKeyguardAuthenticated( false /* strongAuth */); Trace.endSection(); @@ -590,7 +605,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp mUpdateMonitor.isUnlockingWithBiometricAllowed(isStrongBiometric); boolean deviceDreaming = mUpdateMonitor.isDreaming(); boolean bypass = mKeyguardBypassController.getBypassEnabled() - || mKeyguardBypassController.getUserHasDeviceEntryIntent(); + || mAuthController.isUdfpsFingerDown(); if (!mUpdateMonitor.isDeviceInteractive()) { if (!mKeyguardViewController.isShowing()) { return bypass ? MODE_WAKE_AND_UNLOCK : MODE_ONLY_WAKE; @@ -619,14 +634,9 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp if (mKeyguardViewController.isShowing()) { if ((mKeyguardViewController.bouncerIsOrWillBeShowing() || mKeyguardBypassController.getAltBouncerShowing()) && unlockingAllowed) { - if (bypass && mKeyguardBypassController.canPlaySubtleWindowAnimations()) { - return MODE_UNLOCK_FADING; - } else { - return MODE_DISMISS_BOUNCER; - } - } else if (unlockingAllowed) { - return bypass || mAuthController.isUdfpsFingerDown() - ? MODE_UNLOCK_FADING : MODE_NONE; + return MODE_DISMISS_BOUNCER; + } else if (unlockingAllowed && (bypass || mAuthController.isUdfpsFingerDown())) { + return MODE_UNLOCK_COLLAPSING; } else { return bypass ? MODE_SHOW_BOUNCER : MODE_NONE; } @@ -665,6 +675,14 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp mNumConsecutiveFpFailures = 0; } } + + // Suppress all face auth errors if fingerprint can be used to authenticate + if (biometricSourceType == BiometricSourceType.FACE + && !mUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( + KeyguardUpdateMonitor.getCurrentUser())) { + vibrateError(); + } + cleanup(); } @@ -687,9 +705,30 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp startWakeAndUnlock(MODE_SHOW_BOUNCER); UI_EVENT_LOGGER.log(BiometricUiEvent.BIOMETRIC_BOUNCER_SHOWN, getSessionId()); } + cleanup(); } + private void vibrateSuccess() { + if (mShouldVibrate) { + mVibratorHelper.vibrate(Process.myUid(), + "com.android.systemui", + SUCCESS_VIBRATION_EFFECT, + getClass().getSimpleName() + "::success", + HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES); + } + } + + private void vibrateError() { + if (mShouldVibrate) { + mVibratorHelper.vibrate(Process.myUid(), + "com.android.systemui", + ERROR_VIBRATION_EFFECT, + getClass().getSimpleName() + "::error", + HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES); + } + } + private void cleanup() { releaseBiometricWakeLock(); } @@ -802,7 +841,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp * on or off. */ public boolean isBiometricUnlock() { - return isWakeAndUnlock() || mMode == MODE_UNLOCK_COLLAPSING || mMode == MODE_UNLOCK_FADING; + return isWakeAndUnlock() || mMode == MODE_UNLOCK_COLLAPSING; } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java index 9c6ba3af5154..37079e500aa7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java @@ -396,8 +396,7 @@ public interface CentralSurfaces extends Dumpable, ActivityStarter, LifecycleOwn void keyguardGoingAway(); - void setKeyguardFadingAway(long startTime, long delay, long fadeoutDuration, - boolean isBypassFading); + void setKeyguardFadingAway(long startTime, long delay, long fadeoutDuration); void finishKeyguardFadingAway(); @@ -565,8 +564,6 @@ public interface CentralSurfaces extends Dumpable, ActivityStarter, LifecycleOwn void setLaunchEmergencyActionOnFinishedWaking(boolean launch); - void setTopHidesStatusBar(boolean hides); - QSPanelController getQSPanelController(); boolean areNotificationAlertsDisabled(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 0e35cbc1aaf5..450d0d3849d4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -207,7 +207,6 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationLaunchAnimatorControllerProvider; import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager; -import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource; import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider; import com.android.systemui.statusbar.notification.logging.NotificationLogger; @@ -238,7 +237,6 @@ import com.android.systemui.util.WallpaperController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.MessageRouter; import com.android.systemui.volume.VolumeComponent; -import com.android.systemui.wmshell.BubblesManager; import com.android.wm.shell.bubbles.Bubbles; import com.android.wm.shell.startingsurface.SplashscreenContentDrawer; import com.android.wm.shell.startingsurface.StartingSurface; @@ -405,11 +403,6 @@ public class CentralSurfacesImpl extends CoreStartable implements } @Override - public void setTopHidesStatusBar(boolean hides) { - mTopHidesStatusBar = hides; - } - - @Override public QSPanelController getQSPanelController() { return mQSPanelController; } @@ -451,7 +444,6 @@ public class CentralSurfacesImpl extends CoreStartable implements private BiometricUnlockController mBiometricUnlockController; private final LightBarController mLightBarController; private final Lazy<LockscreenWallpaper> mLockscreenWallpaperLazy; - private final LockscreenGestureLogger mLockscreenGestureLogger; @Nullable protected LockscreenWallpaper mLockscreenWallpaper; private final AutoHideController mAutoHideController; @@ -518,9 +510,6 @@ public class CentralSurfacesImpl extends CoreStartable implements private boolean mExpandedVisible; - private final int[] mAbsPos = new int[2]; - - private final NotifShadeEventSource mNotifShadeEventSource; protected final NotificationEntryManager mEntryManager; private final NotificationGutsManager mGutsManager; private final NotificationLogger mNotificationLogger; @@ -602,7 +591,6 @@ public class CentralSurfacesImpl extends CoreStartable implements } } - private Handler mMainHandler; private final DelayableExecutor mMainExecutor; private int mInteractingWindows; @@ -636,12 +624,9 @@ public class CentralSurfacesImpl extends CoreStartable implements // Fingerprint (as computed by getLoggingFingerprint() of the last logged state. private int mLastLoggedStateFingerprint; - private boolean mTopHidesStatusBar; - private boolean mStatusBarWindowHidden; private boolean mIsLaunchingActivityOverLockscreen; private final UserSwitcherController mUserSwitcherController; - private final NetworkController mNetworkController; private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this); protected final BatteryController mBatteryController; protected boolean mPanelExpanded; @@ -661,7 +646,6 @@ public class CentralSurfacesImpl extends CoreStartable implements protected NotificationPresenter mPresenter; private NotificationActivityStarter mNotificationActivityStarter; private final Lazy<NotificationShadeDepthController> mNotificationShadeDepthControllerLazy; - private final Optional<BubblesManager> mBubblesManagerOptional; private final Optional<Bubbles> mBubblesOptional; private final Bubbles.BubbleExpandListener mBubbleExpandListener; private final Optional<StartingSurface> mStartingSurfaceOptional; @@ -703,7 +687,6 @@ public class CentralSurfacesImpl extends CoreStartable implements FalsingManager falsingManager, FalsingCollector falsingCollector, BroadcastDispatcher broadcastDispatcher, - NotifShadeEventSource notifShadeEventSource, NotificationEntryManager notificationEntryManager, NotificationGutsManager notificationGutsManager, NotificationLogger notificationLogger, @@ -718,13 +701,11 @@ public class CentralSurfacesImpl extends CoreStartable implements NotificationLockscreenUserManager lockScreenUserManager, NotificationRemoteInputManager remoteInputManager, UserSwitcherController userSwitcherController, - NetworkController networkController, BatteryController batteryController, SysuiColorExtractor colorExtractor, ScreenLifecycle screenLifecycle, WakefulnessLifecycle wakefulnessLifecycle, SysuiStatusBarStateController statusBarStateController, - Optional<BubblesManager> bubblesManagerOptional, Optional<Bubbles> bubblesOptional, VisualStabilityManager visualStabilityManager, DeviceProvisionedController deviceProvisionedController, @@ -736,7 +717,6 @@ public class CentralSurfacesImpl extends CoreStartable implements DozeParameters dozeParameters, ScrimController scrimController, Lazy<LockscreenWallpaper> lockscreenWallpaperLazy, - LockscreenGestureLogger lockscreenGestureLogger, Lazy<BiometricUnlockController> biometricUnlockControllerLazy, DozeServiceHost dozeServiceHost, PowerManager powerManager, @@ -769,7 +749,6 @@ public class CentralSurfacesImpl extends CoreStartable implements LockscreenShadeTransitionController lockscreenShadeTransitionController, FeatureFlags featureFlags, KeyguardUnlockAnimationController keyguardUnlockAnimationController, - @Main Handler mainHandler, @Main DelayableExecutor delayableExecutor, @Main MessageRouter messageRouter, WallpaperManager wallpaperManager, @@ -799,7 +778,6 @@ public class CentralSurfacesImpl extends CoreStartable implements mFalsingCollector = falsingCollector; mFalsingManager = falsingManager; mBroadcastDispatcher = broadcastDispatcher; - mNotifShadeEventSource = notifShadeEventSource; mEntryManager = notificationEntryManager; mGutsManager = notificationGutsManager; mNotificationLogger = notificationLogger; @@ -814,13 +792,11 @@ public class CentralSurfacesImpl extends CoreStartable implements mLockscreenUserManager = lockScreenUserManager; mRemoteInputManager = remoteInputManager; mUserSwitcherController = userSwitcherController; - mNetworkController = networkController; mBatteryController = batteryController; mColorExtractor = colorExtractor; mScreenLifecycle = screenLifecycle; mWakefulnessLifecycle = wakefulnessLifecycle; mStatusBarStateController = statusBarStateController; - mBubblesManagerOptional = bubblesManagerOptional; mBubblesOptional = bubblesOptional; mVisualStabilityManager = visualStabilityManager; mDeviceProvisionedController = deviceProvisionedController; @@ -834,7 +810,6 @@ public class CentralSurfacesImpl extends CoreStartable implements mDozeParameters = dozeParameters; mScrimController = scrimController; mLockscreenWallpaperLazy = lockscreenWallpaperLazy; - mLockscreenGestureLogger = lockscreenGestureLogger; mScreenPinningRequest = screenPinningRequest; mDozeScrimController = dozeScrimController; mBiometricUnlockControllerLazy = biometricUnlockControllerLazy; @@ -861,7 +836,6 @@ public class CentralSurfacesImpl extends CoreStartable implements mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager; mFeatureFlags = featureFlags; mKeyguardUnlockAnimationController = keyguardUnlockAnimationController; - mMainHandler = mainHandler; mMainExecutor = delayableExecutor; mMessageRouter = messageRouter; mWallpaperManager = wallpaperManager; @@ -1485,12 +1459,16 @@ public class CentralSurfacesImpl extends CoreStartable implements mPowerManager.wakeUp( time, PowerManager.WAKE_REASON_GESTURE, "com.android.systemui:" + why); mWakeUpComingFromTouch = true; - where.getLocationInWindow(mTmpInt2); // NOTE, the incoming view can sometimes be the entire container... unsure if // this location is valuable enough - mWakeUpTouchLocation = new PointF(mTmpInt2[0] + where.getWidth() / 2, - mTmpInt2[1] + where.getHeight() / 2); + if (where != null) { + where.getLocationInWindow(mTmpInt2); + mWakeUpTouchLocation = new PointF(mTmpInt2[0] + where.getWidth() / 2, + mTmpInt2[1] + where.getHeight() / 2); + } else { + mWakeUpTouchLocation = new PointF(-1, -1); + } mFalsingCollector.onScreenOnFromTouch(); } } @@ -2274,8 +2252,7 @@ public class CentralSurfacesImpl extends CoreStartable implements public void updateBubblesVisibility() { mBubblesOptional.ifPresent(bubbles -> bubbles.onStatusBarVisibilityChanged( mStatusBarMode != MODE_LIGHTS_OUT - && mStatusBarMode != MODE_LIGHTS_OUT_TRANSPARENT - && !mStatusBarWindowHidden)); + && mStatusBarMode != MODE_LIGHTS_OUT_TRANSPARENT)); } void checkBarMode(@TransitionMode int mode, @WindowVisibleState int windowState, @@ -2517,6 +2494,12 @@ public class CentralSurfacesImpl extends CoreStartable implements animate, intent.getPackage(), (adapter) -> { ActivityOptions options = new ActivityOptions( CentralSurfaces.getActivityOptions(mDisplayId, adapter)); + + // We know that the intent of the caller is to dismiss the keyguard and + // this runnable is called right after the keyguard is solved, so we tell + // WM that we should dismiss it to avoid flickers when opening an activity + // that can also be shown over the keyguard. + options.setDismissKeyguard(); options.setDisallowEnterPictureInPictureWhileLaunching( disallowEnterPictureInPictureWhileLaunching); if (CameraIntents.isInsecureCameraIntent(intent)) { @@ -3194,14 +3177,12 @@ public class CentralSurfacesImpl extends CoreStartable implements /** * Notifies the status bar the Keyguard is fading away with the specified timings. - * @param startTime the start time of the animations in uptime millis + * @param startTime the start time of the animations in uptime millis * @param delay the precalculated animation delay in milliseconds * @param fadeoutDuration the duration of the exit animation, in milliseconds - * @param isBypassFading is this a fading away animation while bypassing */ @Override - public void setKeyguardFadingAway(long startTime, long delay, long fadeoutDuration, - boolean isBypassFading) { + public void setKeyguardFadingAway(long startTime, long delay, long fadeoutDuration) { mCommandQueue.appTransitionStarting(mDisplayId, startTime + fadeoutDuration - LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION, LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION, true); @@ -3209,7 +3190,7 @@ public class CentralSurfacesImpl extends CoreStartable implements mCommandQueue.appTransitionStarting(mDisplayId, startTime - LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION, LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION, true); - mKeyguardStateController.notifyKeyguardFadingAway(delay, fadeoutDuration, isBypassFading); + mKeyguardStateController.notifyKeyguardFadingAway(delay, fadeoutDuration); } /** @@ -3560,6 +3541,9 @@ public class CentralSurfacesImpl extends CoreStartable implements setBouncerShowingForStatusBarComponents(bouncerShowing); mStatusBarHideIconsForBouncerManager.setBouncerShowingAndTriggerUpdate(bouncerShowing); mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */); + if (mBouncerShowing) { + wakeUpIfDozing(SystemClock.uptimeMillis(), null, "BOUNCER_VISIBLE"); + } updateScrimController(); if (!mBouncerShowing) { updatePanelExpansionForKeyguard(); @@ -3926,7 +3910,8 @@ public class CentralSurfacesImpl extends CoreStartable implements mScrimController.transitionTo(ScrimState.AOD); } else if (mKeyguardStateController.isShowing() && !isOccluded() && !unlocking) { mScrimController.transitionTo(ScrimState.KEYGUARD); - } else if (mKeyguardStateController.isShowing() && mKeyguardUpdateMonitor.isDreaming()) { + } else if (mKeyguardStateController.isShowing() && mKeyguardUpdateMonitor.isDreaming() + && !unlocking) { mScrimController.transitionTo(ScrimState.DREAMING); } else { mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java index 8792118fb9ef..9b88e2650816 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java @@ -216,9 +216,12 @@ public class KeyguardBouncer { // Split up the work over multiple frames. DejankUtils.removeCallbacks(mResetRunnable); - if (mKeyguardStateController.isFaceAuthEnabled() && !needsFullscreenBouncer() - && !mKeyguardUpdateMonitor.userNeedsStrongAuth() - && !mKeyguardBypassController.getBypassEnabled()) { + if (mKeyguardStateController.isFaceAuthEnabled() + && !mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( + KeyguardUpdateMonitor.getCurrentUser()) + && !needsFullscreenBouncer() + && !mKeyguardUpdateMonitor.userNeedsStrongAuth() + && !mKeyguardBypassController.getBypassEnabled()) { mHandler.postDelayed(mShowRunnable, BOUNCER_FACE_DELAY); } else { DejankUtils.postAfterTraversal(mShowRunnable); @@ -394,10 +397,6 @@ public class KeyguardBouncer { return mShowingSoon || mExpansion != EXPANSION_HIDDEN && mExpansion != EXPANSION_VISIBLE; } - public boolean getShowingSoon() { - return mShowingSoon; - } - /** * @return {@code true} when bouncer's pre-hide animation already started but isn't completely * hidden yet, {@code false} otherwise. @@ -641,6 +640,10 @@ public class KeyguardBouncer { public interface BouncerExpansionCallback { /** * Invoked when the bouncer expansion reaches {@link KeyguardBouncer#EXPANSION_VISIBLE}. + * This is NOT called each time the bouncer is shown, but rather only when the fully + * shown amount has changed based on the panel expansion. The bouncer is visibility + * can still change when the expansion amount hasn't changed. + * See {@link KeyguardBouncer#isShowing()} for the checks for the bouncer showing state. */ default void onFullyShown() { } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt index 034fc589df97..b987f6815000 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt @@ -43,7 +43,6 @@ open class KeyguardBypassController : Dumpable, StackScrollAlgorithm.BypassContr private var hasFaceFeature: Boolean private var pendingUnlock: PendingUnlock? = null private val listeners = mutableListOf<OnBypassStateChangedListener>() - var userHasDeviceEntryIntent: Boolean = false // ie: attempted udfps auth private val faceAuthEnabledChangedCallback = object : KeyguardStateController.Callback { override fun onFaceAuthEnabledChanged() = notifyListeners() @@ -197,20 +196,6 @@ open class KeyguardBypassController : Dumpable, StackScrollAlgorithm.BypassContr return false } - /** - * If shorter animations should be played when unlocking. - */ - fun canPlaySubtleWindowAnimations(): Boolean { - if (bypassEnabled) { - return when { - statusBarStateController.state != StatusBarState.KEYGUARD -> false - qSExpanded -> false - else -> true - } - } - return false - } - fun onStartedGoingToSleep() { pendingUnlock = null } @@ -231,7 +216,6 @@ open class KeyguardBypassController : Dumpable, StackScrollAlgorithm.BypassContr pw.println(" launchingAffordance: $launchingAffordance") pw.println(" qSExpanded: $qSExpanded") pw.println(" hasFaceFeature: $hasFaceFeature") - pw.println(" userHasDeviceEntryIntent: $userHasDeviceEntryIntent") } /** Registers a listener for bypass state changes. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java index 5d417e0b59e2..3e10166e4c3e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java @@ -165,6 +165,7 @@ public abstract class PanelViewController { private float mInitialTouchY; private float mInitialTouchX; private boolean mTouchDisabled; + private boolean mInitialTouchFromKeyguard; /** * Whether or not the PanelView can be expanded or collapsed with a drag. @@ -394,6 +395,7 @@ public abstract class PanelViewController { mInitialOffsetOnTouch = expandedHeight; mInitialTouchY = newY; mInitialTouchX = newX; + mInitialTouchFromKeyguard = mKeyguardStateController.isShowing(); if (startTracking) { mTouchSlopExceeded = true; setExpandedHeight(mInitialOffsetOnTouch); @@ -412,24 +414,16 @@ public abstract class PanelViewController { float vectorVel = (float) Math.hypot( mVelocityTracker.getXVelocity(), mVelocityTracker.getYVelocity()); - final boolean onKeyguard = - mStatusBarStateController.getState() == StatusBarState.KEYGUARD; - + final boolean onKeyguard = mKeyguardStateController.isShowing(); final boolean expand; - if (event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) { - // If the keyguard is fading away, don't expand it again. This can happen if you're - // swiping to unlock, the app below the keyguard is in landscape, and the screen - // rotates while your finger is still down after the swipe to unlock. - if (mKeyguardStateController.isKeyguardFadingAway()) { - expand = false; - } else if (onKeyguard) { + if (mKeyguardStateController.isKeyguardFadingAway() + || (mInitialTouchFromKeyguard && !onKeyguard)) { + // Don't expand for any touches that started from the keyguard and ended after the + // keyguard is gone. + expand = false; + } else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) { + if (onKeyguard) { expand = true; - } else if (mKeyguardStateController.isKeyguardFadingAway()) { - // If we're in the middle of dismissing the keyguard, don't expand due to the - // cancelled gesture. Gesture cancellation during an unlock is expected in some - // situations, such keeping your finger down while swiping to unlock to an app - // that is locked in landscape (the rotation will cancel the touch event). - expand = false; } else { // If we get a cancel, put the shade back to the state it was in when the // gesture started @@ -438,7 +432,6 @@ public abstract class PanelViewController { } else { expand = flingExpands(vel, vectorVel, x, y); } - mDozeLog.traceFling(expand, mTouchAboveFalsingThreshold, mCentralSurfaces.isFalsingThresholdNeeded(), mCentralSurfaces.isWakeUpComingFromTouch()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java index 4a5f712d587c..b447f0d36c10 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java @@ -252,7 +252,7 @@ public enum ScrimState { mBehindTint = Color.BLACK; mBlankScreen = false; - if (previousState == ScrimState.AOD) { + if (mDisplayRequiresBlanking && previousState == ScrimState.AOD) { // Set all scrims black, before they fade transparent. updateScrimColor(mScrimInFront, 1f /* alpha */, Color.BLACK /* tint */); updateScrimColor(mScrimBehind, 1f /* alpha */, Color.BLACK /* tint */); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index 61e123a8e42a..68d95e882ced 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -19,8 +19,8 @@ package com.android.systemui.statusbar.phone; import static android.view.WindowInsets.Type.navigationBars; import static com.android.systemui.plugins.ActivityStarter.OnDismissAction; +import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_DISMISS_BOUNCER; import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_UNLOCK_COLLAPSING; -import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_UNLOCK_FADING; import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK; import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK_PULSING; @@ -130,8 +130,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb public void onFullyShown() { mBouncerAnimating = false; updateStates(); - mCentralSurfaces.wakeUpIfDozing(SystemClock.uptimeMillis(), - mCentralSurfaces.getBouncerContainer(), "BOUNCER_VISIBLE"); } @Override @@ -384,6 +382,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb mBouncer.setExpansion(KeyguardBouncer.EXPANSION_VISIBLE); } else if (mShowing && !hideBouncerOverDream) { if (!isWakeAndUnlocking() + && !(mBiometricUnlockController.getMode() == MODE_DISMISS_BOUNCER) && !mCentralSurfaces.isInLaunchTransition() && !isUnlockCollapsing()) { mBouncer.setExpansion(fraction); @@ -395,9 +394,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } } else if (!mShowing && mBouncer.inTransit()) { // Keyguard is not visible anymore, but expansion animation was still running. - // We need to keep propagating the expansion state to the bouncer, otherwise it will be - // stuck in transit. - mBouncer.setExpansion(fraction); + // We need to hide the bouncer, otherwise it will be stuck in transit. + mBouncer.setExpansion(KeyguardBouncer.EXPANSION_HIDDEN); } else if (mPulsing && fraction == KeyguardBouncer.EXPANSION_VISIBLE) { // Panel expanded while pulsing but didn't translate the bouncer (because we are // unlocked.) Let's simply wake-up to dismiss the lock screen. @@ -736,8 +734,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } mNotificationShadeWindowController.setKeyguardOccluded(mOccluded); - // setDozing(false) will call reset once we stop dozing. - if (!mDozing) { + // setDozing(false) will call reset once we stop dozing. Also, if we're going away, there's + // no need to reset the keyguard views as we'll be gone shortly. Resetting now could cause + // unexpected visible behavior if the keyguard is still visible as we're animating unlocked. + if (!mDozing && !mKeyguardStateController.isKeyguardGoingAway()) { // If Keyguard is reshown, don't hide the bouncer as it might just have been requested // by a FLAG_DISMISS_KEYGUARD_ACTIVITY. reset(isOccluding /* hideBouncerWhenShowing*/); @@ -832,46 +832,17 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb executeAfterKeyguardGoneAction(); boolean wakeUnlockPulsing = mBiometricUnlockController.getMode() == MODE_WAKE_AND_UNLOCK_PULSING; - boolean needsFading = needsBypassFading(); - if (needsFading) { - delay = 0; - fadeoutDuration = KeyguardBypassController.BYPASS_FADE_DURATION; - } else if (wakeUnlockPulsing) { - delay = 0; - fadeoutDuration = 240; - } - mCentralSurfaces.setKeyguardFadingAway(startTime, delay, fadeoutDuration, needsFading); + mCentralSurfaces.setKeyguardFadingAway(startTime, delay, fadeoutDuration); mBiometricUnlockController.startKeyguardFadingAway(); hideBouncer(true /* destroyView */); if (wakeUnlockPulsing) { - if (needsFading) { - ViewGroupFadeHelper.fadeOutAllChildrenExcept( - mNotificationPanelViewController.getView(), - mNotificationContainer, - fadeoutDuration, - () -> { - mCentralSurfaces.hideKeyguard(); - onKeyguardFadedAway(); - }); - } else { - mCentralSurfaces.fadeKeyguardWhilePulsing(); - } + mCentralSurfaces.fadeKeyguardWhilePulsing(); wakeAndUnlockDejank(); } else { boolean staying = mStatusBarStateController.leaveOpenOnKeyguardHide(); if (!staying) { mNotificationShadeWindowController.setKeyguardFadingAway(true); - if (needsFading) { - ViewGroupFadeHelper.fadeOutAllChildrenExcept( - mNotificationPanelViewController.getView(), - mNotificationContainer, - fadeoutDuration, - () -> { - mCentralSurfaces.hideKeyguard(); - }); - } else { - mCentralSurfaces.hideKeyguard(); - } + mCentralSurfaces.hideKeyguard(); // hide() will happen asynchronously and might arrive after the scrims // were already hidden, this means that the transition callback won't // be triggered anymore and StatusBarWindowController will be forever in @@ -884,6 +855,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb mBiometricUnlockController.finishKeyguardFadingAway(); } } + updateStates(); mNotificationShadeWindowController.setKeyguardShowing(false); mViewMediatorCallback.keyguardGone(); @@ -893,13 +865,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb Trace.endSection(); } - private boolean needsBypassFading() { - return (mBiometricUnlockController.getMode() == MODE_UNLOCK_FADING - || mBiometricUnlockController.getMode() == MODE_WAKE_AND_UNLOCK_PULSING - || mBiometricUnlockController.getMode() == MODE_WAKE_AND_UNLOCK) - && mBypassController.getBypassEnabled(); - } - @Override public void onNavigationModeChanged(int mode) { boolean gesturalNav = QuickStepContract.isGesturalMode(mode); @@ -999,7 +964,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb @Override public boolean bouncerIsOrWillBeShowing() { - return isBouncerShowing() || mBouncer.getShowingSoon(); + return isBouncerShowing() || mBouncer.inTransit(); } public boolean isFullscreenBouncer() { @@ -1186,7 +1151,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb @Override public boolean shouldSubtleWindowAnimationsForUnlock() { - return needsBypassFading(); + return false; } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java index 597c949168d4..cf1edf9094df 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java @@ -483,6 +483,10 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue int state = mAnimationScheduler.getAnimationState(); if (state == IDLE || state == SHOWING_PERSISTENT_DOT) { animateShow(mSystemIconArea, animate); + } else { + // We are in the middle of a system status event animation, which will animate the + // alpha (but not the visibility). Allow the view to become visible again + mSystemIconArea.setVisibility(View.VISIBLE); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateController.java index dce24122aa7e..250d9d46de66 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateController.java @@ -109,28 +109,15 @@ public interface KeyguardStateController extends CallbackController<Callback> { * we're bypassing */ default long getShortenedFadingAwayDuration() { - if (isBypassFadingAnimation()) { - return getKeyguardFadingAwayDuration(); - } else { - return getKeyguardFadingAwayDuration() / 2; - } - } - - /** - * @return {@code true} if the current fading away animation is the fast bypass fading. - */ - default boolean isBypassFadingAnimation() { - return false; + return getKeyguardFadingAwayDuration() / 2; } /** * Notifies that the Keyguard is fading away with the specified timings. * @param delay the precalculated animation delay in milliseconds * @param fadeoutDuration the duration of the exit animation, in milliseconds - * @param isBypassFading is this a fading away animation while bypassing */ - default void notifyKeyguardFadingAway(long delay, long fadeoutDuration, - boolean isBypassFading) { + default void notifyKeyguardFadingAway(long delay, long fadeoutDuratio) { } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java index 2a225b909f90..2fb16ee9b3b9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java @@ -72,7 +72,6 @@ public class KeyguardStateControllerImpl implements KeyguardStateController, Dum private long mKeyguardFadingAwayDuration; private boolean mKeyguardGoingAway; private boolean mLaunchTransitionFadingAway; - private boolean mBypassFadingAnimation; private boolean mTrustManaged; private boolean mTrusted; private boolean mDebugUnlocked = false; @@ -203,10 +202,9 @@ public class KeyguardStateControllerImpl implements KeyguardStateController, Dum } @Override - public void notifyKeyguardFadingAway(long delay, long fadeoutDuration, boolean isBypassFading) { + public void notifyKeyguardFadingAway(long delay, long fadeoutDuration) { mKeyguardFadingAwayDelay = delay; mKeyguardFadingAwayDuration = fadeoutDuration; - mBypassFadingAnimation = isBypassFading; setKeyguardFadingAway(true); } @@ -284,11 +282,6 @@ public class KeyguardStateControllerImpl implements KeyguardStateController, Dum } @Override - public boolean isBypassFadingAnimation() { - return mBypassFadingAnimation; - } - - @Override public long getKeyguardFadingAwayDelay() { return mKeyguardFadingAwayDelay; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java index 92e49473927f..90609fa2772f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java @@ -50,6 +50,7 @@ import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.Insets; +import android.graphics.Path; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; @@ -75,14 +76,19 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.test.filters.SmallTest; +import com.android.keyguard.KeyguardUpdateMonitor; +import com.android.systemui.biometrics.AuthController; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.decor.CornerDecorProvider; import com.android.systemui.decor.DecorProvider; import com.android.systemui.decor.DecorProviderFactory; +import com.android.systemui.decor.FaceScanningOverlayProviderImpl; +import com.android.systemui.decor.FaceScanningProviderFactory; import com.android.systemui.decor.OverlayWindow; import com.android.systemui.decor.PrivacyDotCornerDecorProviderImpl; import com.android.systemui.decor.PrivacyDotDecorProviderFactory; import com.android.systemui.decor.RoundedCornerResDelegate; +import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.events.PrivacyDotViewController; import com.android.systemui.tuner.TunerService; @@ -113,6 +119,13 @@ public class ScreenDecorationsTest extends SysuiTestCase { private final FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); private FakeThreadFactory mThreadFactory; private ArrayList<DecorProvider> mPrivacyDecorProviders; + private ArrayList<DecorProvider> mFaceScanningProviders; + @Mock + private KeyguardUpdateMonitor mKeyguardUpdateMonitor; + @Mock + private StatusBarStateController mStatusBarStateController; + @Mock + private AuthController mAuthController; @Mock private Display mDisplay; @Mock @@ -128,6 +141,10 @@ public class ScreenDecorationsTest extends SysuiTestCase { @Mock private PrivacyDotDecorProviderFactory mPrivacyDotDecorProviderFactory; @Mock + private FaceScanningProviderFactory mFaceScanningProviderFactory; + @Mock + private FaceScanningOverlayProviderImpl mFaceScanningDecorProvider; + @Mock private CornerDecorProvider mPrivacyDotTopLeftDecorProvider; @Mock private CornerDecorProvider mPrivacyDotTopRightDecorProvider; @@ -189,9 +206,16 @@ public class ScreenDecorationsTest extends SysuiTestCase { DisplayCutout.BOUNDS_POSITION_RIGHT, R.layout.privacy_dot_bottom_right)); + mFaceScanningDecorProvider = spy(new FaceScanningOverlayProviderImpl( + BOUNDS_POSITION_TOP, + mAuthController, + mStatusBarStateController, + mKeyguardUpdateMonitor, + mExecutor)); + mScreenDecorations = spy(new ScreenDecorations(mContext, mExecutor, mSecureSettings, mBroadcastDispatcher, mTunerService, mUserTracker, mDotViewController, - mThreadFactory, mPrivacyDotDecorProviderFactory) { + mThreadFactory, mPrivacyDotDecorProviderFactory, mFaceScanningProviderFactory) { @Override public void start() { super.start(); @@ -211,9 +235,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { } @Override - protected void setOverlayWindowVisibilityIfViewExist(@Nullable View view, - @View.Visibility int visibility) { - super.setOverlayWindowVisibilityIfViewExist(view, visibility); + protected void updateOverlayWindowVisibilityIfViewExists(@Nullable View view) { + super.updateOverlayWindowVisibilityIfViewExists(view); mExecutor.runAllReady(); } }); @@ -269,6 +292,16 @@ public class ScreenDecorationsTest extends SysuiTestCase { } } + private void verifyFaceScanningViewExists(final boolean exists) { + final View overlay = mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP].getRootView(); + final View view = overlay.findViewById(mFaceScanningDecorProvider.getViewId()); + if (exists) { + assertNotNull(view); + } else { + assertNull(view); + } + } + @Nullable private View findViewFromOverlays(@IdRes int id) { for (OverlayWindow overlay: mScreenDecorations.mOverlays) { @@ -393,10 +426,11 @@ public class ScreenDecorationsTest extends SysuiTestCase { } @Test - public void testNoRounding_NoCutout_NoPrivacyDot() { + public void testNoRounding_NoCutout_NoPrivacyDot_NoFaceScanning() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // no cutout doReturn(null).when(mScreenDecorations).getCutout(); @@ -411,10 +445,11 @@ public class ScreenDecorationsTest extends SysuiTestCase { } @Test - public void testNoRounding_NoCutout_PrivacyDot() { + public void testNoRounding_NoCutout_PrivacyDot_NoFaceScanning() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // no cutout doReturn(null).when(mScreenDecorations).getCutout(); @@ -435,6 +470,9 @@ public class ScreenDecorationsTest extends SysuiTestCase { // Privacy dots shall exist but invisible verifyDotViewsVisibility(View.INVISIBLE); + // Face scanning doesn't exist + verifyFaceScanningViewExists(false); + // One tunable. verify(mTunerService, times(1)).addTunable(any(), any()); // Dot controller init @@ -443,10 +481,11 @@ public class ScreenDecorationsTest extends SysuiTestCase { } @Test - public void testRounding_NoCutout_NoPrivacyDot() { + public void testRounding_NoCutout_NoPrivacyDot_NoFaceScanning() { setupResources(20 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 20 /* roundedPadding */, false /* fillCutout */, false /* privacyDot */); + 20 /* roundedPadding */, false /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // no cutout doReturn(null).when(mScreenDecorations).getCutout(); @@ -464,6 +503,9 @@ public class ScreenDecorationsTest extends SysuiTestCase { // Privacy dots shall not exist verifyDotViewsNullable(true); + // Face scanning doesn't exist + verifyFaceScanningViewExists(false); + // One tunable. verify(mTunerService, times(1)).addTunable(any(), any()); // No dot controller init @@ -471,10 +513,11 @@ public class ScreenDecorationsTest extends SysuiTestCase { } @Test - public void testRounding_NoCutout_PrivacyDot() { + public void testRounding_NoCutout_PrivacyDot_NoFaceScanning() { setupResources(20 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 20 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 20 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // no cutout doReturn(null).when(mScreenDecorations).getCutout(); @@ -494,6 +537,9 @@ public class ScreenDecorationsTest extends SysuiTestCase { // Privacy dots shall exist but invisible verifyDotViewsVisibility(View.INVISIBLE); + // Face scanning doesn't exist + verifyFaceScanningViewExists(false); + // One tunable. verify(mTunerService, times(1)).addTunable(any(), any()); // Dot controller init @@ -509,7 +555,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { /* roundedTopDrawable */, getTestsDrawable(com.android.systemui.tests.R.drawable.rounded3px) /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // no cutout doReturn(null).when(mScreenDecorations).getCutout(); @@ -527,7 +574,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { /* roundedTopDrawable */, getTestsDrawable(com.android.systemui.tests.R.drawable.rounded3px) /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // no cutout doReturn(null).when(mScreenDecorations).getCutout(); @@ -563,7 +611,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { /* roundedTopDrawable */, getTestsDrawable(com.android.systemui.tests.R.drawable.rounded5px) /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // left cutout final Rect[] bounds = {new Rect(0, 50, 1, 60), null, null, null}; @@ -598,7 +647,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testNoRounding_CutoutShortEdge_NoPrivacyDot() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // top cutout final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null}; @@ -621,7 +671,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testNoRounding_CutoutShortEdge_PrivacyDot() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // top cutout final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null}; @@ -655,7 +706,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testNoRounding_CutoutLongEdge_NoPrivacyDot() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // left cutout final Rect[] bounds = {new Rect(0, 50, 1, 60), null, null, null}; @@ -682,7 +734,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testNoRounding_CutoutLongEdge_PrivacyDot() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // left cutout final Rect[] bounds = {new Rect(0, 50, 1, 60), null, null, null}; @@ -709,7 +762,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testRounding_CutoutShortEdge_NoPrivacyDot() { setupResources(20 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 20 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 20 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // top cutout final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null}; @@ -737,7 +791,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testRounding_CutoutShortEdge_PrivacyDot() { setupResources(20 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 20 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */); + 20 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // top cutout final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null}; @@ -768,7 +823,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testRounding_CutoutLongEdge_NoPrivacyDot() { setupResources(20 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 20 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 20 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // left cutout final Rect[] bounds = {new Rect(0, 50, 1, 60), null, null, null}; @@ -786,7 +842,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testRounding_CutoutLongEdge_PrivacyDot() { setupResources(20 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 20 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */); + 20 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // left cutout final Rect[] bounds = {new Rect(0, 50, 1, 60), null, null, null}; @@ -806,7 +863,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testRounding_CutoutShortAndLongEdge_NoPrivacyDot() { setupResources(20 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 20 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 20 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // top and left cutout final Rect[] bounds = {new Rect(0, 50, 1, 60), new Rect(9, 0, 10, 1), null, null}; @@ -825,7 +883,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testRounding_CutoutShortAndLongEdge_PrivacyDot() { setupResources(20 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 20 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */); + 20 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // top and left cutout final Rect[] bounds = {new Rect(0, 50, 1, 60), new Rect(9, 0, 10, 1), null, null}; @@ -846,7 +905,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testNoRounding_SwitchFrom_ShortEdgeCutout_To_LongCutout_NoPrivacyDot() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // Set to short edge cutout(top). final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null}; @@ -869,7 +929,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testNoRounding_SwitchFrom_ShortEdgeCutout_To_LongCutout_PrivacyDot() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // Set to short edge cutout(top). final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null}; @@ -912,7 +973,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testDelayedCutout_NoPrivacyDot() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // top cutout final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null}; @@ -935,7 +997,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testDelayedCutout_PrivacyDot() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); // top cutout final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null}; @@ -980,7 +1043,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { /* roundedTopDrawable */, getTestsDrawable(com.android.systemui.tests.R.drawable.rounded4px) /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + false /* faceScanning*/); mDisplayInfo.rotation = Surface.ROTATION_0; mScreenDecorations.start(); @@ -994,7 +1058,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { /* roundedTopDrawable */, getTestsDrawable(com.android.systemui.tests.R.drawable.rounded5px) /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + false /* faceScanning*/); mDisplayInfo.rotation = Surface.ROTATION_270; mScreenDecorations.onConfigurationChanged(null); @@ -1007,7 +1072,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testOnlyRoundedCornerRadiusTop() { setupResources(0 /* radius */, 10 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); mScreenDecorations.start(); @@ -1028,7 +1094,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testOnlyRoundedCornerRadiusBottom() { setupResources(0 /* radius */, 0 /* radiusTop */, 20 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); mScreenDecorations.start(); @@ -1099,7 +1166,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testSupportHwcLayer_SwitchFrom_NotSupport() { setupResources(0 /* radius */, 10 /* radiusTop */, 20 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // top cutout final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null}; @@ -1127,7 +1195,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testNotSupportHwcLayer_SwitchFrom_Support() { setupResources(0 /* radius */, 10 /* radiusTop */, 20 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); final DisplayDecorationSupport decorationSupport = new DisplayDecorationSupport(); decorationSupport.format = PixelFormat.R_8; doReturn(decorationSupport).when(mDisplay).getDisplayDecorationSupport(); @@ -1165,7 +1234,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { /* roundedTopDrawable */, getTestsDrawable(com.android.systemui.tests.R.drawable.rounded4px) /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */, + true /* faceScanning */); final DisplayDecorationSupport decorationSupport = new DisplayDecorationSupport(); decorationSupport.format = PixelFormat.R_8; doReturn(decorationSupport).when(mDisplay).getDisplayDecorationSupport(); @@ -1182,19 +1252,33 @@ public class ScreenDecorationsTest extends SysuiTestCase { // Make sure view found and window visibility changed as well final View view = mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM].getRootView() .findViewById(R.id.privacy_dot_bottom_right_container); + view.setVisibility(View.VISIBLE); mPrivacyDotShowingListener.onPrivacyDotShown(view); assertEquals(View.VISIBLE, mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM].getRootView().getVisibility()); + view.setVisibility(View.INVISIBLE); mPrivacyDotShowingListener.onPrivacyDotHidden(view); assertEquals(View.INVISIBLE, mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM].getRootView().getVisibility()); + + // Make sure face scanning view found and window visibility updates on camera protection + // update + final View faceScanView = mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP].getRootView() + .findViewById(mFaceScanningDecorProvider.getViewId()); + when(mFaceScanningProviderFactory.shouldShowFaceScanningAnim()).thenReturn(true); + faceScanView.setVisibility(View.VISIBLE); + mScreenDecorations.showCameraProtection(new Path(), new Rect()); + mExecutor.runAllReady(); + assertEquals(View.VISIBLE, + mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP].getRootView().getVisibility()); } @Test public void testAutoShowHideOverlayWindowWhenNoRoundedAndNoCutout() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, true /* privacyDot */, + true /* faceScanning */); // no cutout doReturn(null).when(mScreenDecorations).getCutout(); @@ -1206,19 +1290,33 @@ public class ScreenDecorationsTest extends SysuiTestCase { // Make sure view found and window visibility changed as well final View view = mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM].getRootView() .findViewById(R.id.privacy_dot_bottom_right_container); + view.setVisibility(View.VISIBLE); mPrivacyDotShowingListener.onPrivacyDotShown(view); assertEquals(View.VISIBLE, mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM].getRootView().getVisibility()); + view.setVisibility(View.INVISIBLE); mPrivacyDotShowingListener.onPrivacyDotHidden(view); assertEquals(View.INVISIBLE, mScreenDecorations.mOverlays[BOUNDS_POSITION_BOTTOM].getRootView().getVisibility()); + + // Make sure face scanning view found and window visibility updates on camera protection + // update + final View faceScanView = mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP].getRootView() + .findViewById(mFaceScanningDecorProvider.getViewId()); + faceScanView.setVisibility(View.VISIBLE); + when(mFaceScanningProviderFactory.shouldShowFaceScanningAnim()).thenReturn(true); + mScreenDecorations.showCameraProtection(new Path(), new Rect()); + mExecutor.runAllReady(); + assertEquals(View.VISIBLE, + mScreenDecorations.mOverlays[BOUNDS_POSITION_TOP].getRootView().getVisibility()); } @Test - public void testHwcLayer_noPrivacyDot() { + public void testHwcLayer_noPrivacyDot_noFaceScanning() { setupResources(0 /* radius */, 10 /* radiusTop */, 20 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); final DisplayDecorationSupport decorationSupport = new DisplayDecorationSupport(); decorationSupport.format = PixelFormat.R_8; doReturn(decorationSupport).when(mDisplay).getDisplayDecorationSupport(); @@ -1236,10 +1334,11 @@ public class ScreenDecorationsTest extends SysuiTestCase { } @Test - public void testHwcLayer_PrivacyDot() { + public void testHwcLayer_PrivacyDot_FaceScanning() { setupResources(0 /* radius */, 10 /* radiusTop */, 20 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */, + true /* faceScanning */); final DisplayDecorationSupport decorationSupport = new DisplayDecorationSupport(); decorationSupport.format = PixelFormat.R_8; doReturn(decorationSupport).when(mDisplay).getDisplayDecorationSupport(); @@ -1257,13 +1356,16 @@ public class ScreenDecorationsTest extends SysuiTestCase { verify(mDotViewController, times(1)).initialize(any(), any(), any(), any()); verify(mDotViewController, times(1)).setShowingListener( mScreenDecorations.mPrivacyDotShowingListener); + + verifyFaceScanningViewExists(true); } @Test public void testOnDisplayChanged_hwcLayer() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); final DisplayDecorationSupport decorationSupport = new DisplayDecorationSupport(); decorationSupport.format = PixelFormat.R_8; doReturn(decorationSupport).when(mDisplay).getDisplayDecorationSupport(); @@ -1288,7 +1390,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testOnDisplayChanged_nonHwcLayer() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); // top cutout final Rect[] bounds = {null, new Rect(9, 0, 10, 1), null, null}; @@ -1311,7 +1414,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testHasSameProvidersWithNullOverlays() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, false /* fillCutout */, false /* privacyDot */); + 0 /* roundedPadding */, false /* fillCutout */, false /* privacyDot */, + false /* faceScanning */); mScreenDecorations.start(); @@ -1329,7 +1433,8 @@ public class ScreenDecorationsTest extends SysuiTestCase { public void testHasSameProvidersWithPrivacyDots() { setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, null /* roundedTopDrawable */, null /* roundedBottomDrawable */, - 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */); + 0 /* roundedPadding */, true /* fillCutout */, true /* privacyDot */, + false /* faceScanning */); mScreenDecorations.start(); @@ -1366,7 +1471,7 @@ public class ScreenDecorationsTest extends SysuiTestCase { private void setupResources(int radius, int radiusTop, int radiusBottom, @Nullable Drawable roundedTopDrawable, @Nullable Drawable roundedBottomDrawable, - int roundedPadding, boolean fillCutout, boolean privacyDot) { + int roundedPadding, boolean fillCutout, boolean privacyDot, boolean faceScanning) { mContext.getOrCreateTestableResources().addOverride( com.android.internal.R.array.config_displayUniqueIdArray, new String[]{}); @@ -1418,6 +1523,13 @@ public class ScreenDecorationsTest extends SysuiTestCase { } when(mPrivacyDotDecorProviderFactory.getProviders()).thenReturn(mPrivacyDecorProviders); when(mPrivacyDotDecorProviderFactory.getHasProviders()).thenReturn(privacyDot); + + mFaceScanningProviders = new ArrayList<>(); + if (faceScanning) { + mFaceScanningProviders.add(mFaceScanningDecorProvider); + } + when(mFaceScanningProviderFactory.getProviders()).thenReturn(mFaceScanningProviders); + when(mFaceScanningProviderFactory.getHasProviders()).thenReturn(faceScanning); } private DisplayCutout getDisplayCutoutForRotation(Insets safeInsets, Rect[] cutoutBounds) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/ViewHierarchyAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/ViewHierarchyAnimatorTest.kt index 6a9bb3e343be..b61fbbe1ea75 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/animation/ViewHierarchyAnimatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/animation/ViewHierarchyAnimatorTest.kt @@ -520,6 +520,145 @@ ViewHierarchyAnimatorTest : SysuiTestCase() { endAnimation(rootView) } + @Test + fun animatesAppearingViewsFadeIn_alphaStartsAtZero_endsAtOne() { + rootView.alpha = 0f + ViewHierarchyAnimator.animateAddition(rootView, includeFadeIn = true) + rootView.layout(50 /* l */, 50 /* t */, 100 /* r */, 100 /* b */) + + advanceFadeInAnimation(rootView, fraction = 1f) + endFadeInAnimation(rootView) + + assertNull(rootView.getTag(R.id.tag_alpha_animator)) + assertEquals(1f, rootView.alpha) + } + + @Test + fun animatesAppearingViewsFadeIn_alphaStartsAboveZero_endsAtOne() { + rootView.alpha = 0.2f + ViewHierarchyAnimator.animateAddition(rootView, includeFadeIn = true) + rootView.layout(50 /* l */, 50 /* t */, 100 /* r */, 100 /* b */) + + advanceFadeInAnimation(rootView, fraction = 1f) + endFadeInAnimation(rootView) + + assertNull(rootView.getTag(R.id.tag_alpha_animator)) + assertEquals(1f, rootView.alpha) + } + + @Test + fun animatesAppearingViewsFadeIn_alphaStartsAsZero_alphaUpdatedMidAnimation() { + rootView.alpha = 0f + ViewHierarchyAnimator.animateAddition( + rootView, + includeFadeIn = true, + fadeInInterpolator = Interpolators.LINEAR + ) + rootView.layout(50 /* l */, 50 /* t */, 100 /* r */, 100 /* b */) + + advanceFadeInAnimation(rootView, fraction = 0.42f) + + assertEquals(0.42f, rootView.alpha) + } + + @Test + fun animatesAppearingViewsFadeIn_alphaStartsAboveZero_alphaUpdatedMidAnimation() { + rootView.alpha = 0.6f + ViewHierarchyAnimator.animateAddition( + rootView, + includeFadeIn = true, + fadeInInterpolator = Interpolators.LINEAR + ) + rootView.layout(50 /* l */, 50 /* t */, 100 /* r */, 100 /* b */) + + advanceFadeInAnimation(rootView, fraction = 0.5f) + + assertEquals(0.8f, rootView.alpha) + } + + @Test + fun animatesAppearingViewsFadeIn_childViewAlphasAlsoAnimated() { + rootView.alpha = 0f + val firstChild = View(context) + firstChild.alpha = 0f + val secondChild = View(context) + secondChild.alpha = 0f + rootView.addView(firstChild) + rootView.addView(secondChild) + + ViewHierarchyAnimator.animateAddition( + rootView, + includeFadeIn = true, + fadeInInterpolator = Interpolators.LINEAR + ) + rootView.layout(50 /* l */, 50 /* t */, 100 /* r */, 100 /* b */) + + advanceFadeInAnimation(rootView, fraction = 0.5f) + + assertEquals(0.5f, rootView.alpha) + assertEquals(0.5f, firstChild.alpha) + assertEquals(0.5f, secondChild.alpha) + } + + @Test + fun animatesAppearingViewsFadeIn_animatesFromPreviousAnimationProgress() { + rootView.alpha = 0f + ViewHierarchyAnimator.animateAddition( + rootView, + includeFadeIn = true, + fadeInInterpolator = Interpolators.LINEAR + ) + rootView.layout(50 /* l */, 50 /* t */, 100 /* r */, 100 /* b */) + + advanceFadeInAnimation(rootView, fraction = 0.5f) + assertEquals(0.5f, rootView.alpha) + assertNotNull(rootView.getTag(R.id.tag_alpha_animator)) + + // IF we request animation again + ViewHierarchyAnimator.animateAddition( + rootView, + includeFadeIn = true, + fadeInInterpolator = Interpolators.LINEAR + ) + + // THEN the alpha remains at its current value (it doesn't get reset to 0) + assertNotNull(rootView.getTag(R.id.tag_alpha_animator)) + assertEquals(0.5f, rootView.alpha) + + // IF we advance the new animation to the end + advanceFadeInAnimation(rootView, fraction = 1f) + endFadeInAnimation(rootView) + + // THEN we still end at the correct value + assertNull(rootView.getTag(R.id.tag_alpha_animator)) + assertEquals(1f, rootView.alpha) + } + + @Test + fun animatesAppearingViews_fadeInFalse_alphasNotUpdated() { + rootView.alpha = 0.3f + val firstChild = View(context) + firstChild.alpha = 0.4f + val secondChild = View(context) + secondChild.alpha = 0.5f + rootView.addView(firstChild) + rootView.addView(secondChild) + + ViewHierarchyAnimator.animateAddition( + rootView, + includeFadeIn = false, + fadeInInterpolator = Interpolators.LINEAR + ) + rootView.layout(50 /* l */, 50 /* t */, 100 /* r */, 100 /* b */) + + advanceFadeInAnimation(rootView, fraction = 1f) + + assertEquals(0.3f, rootView.alpha) + assertEquals(0.4f, firstChild.alpha) + assertEquals(0.5f, secondChild.alpha) + } + + @Test fun animatesViewRemovalFromStartToEnd() { setUpRootWithChildren() @@ -1003,6 +1142,16 @@ ViewHierarchyAnimatorTest : SysuiTestCase() { } } + private fun advanceFadeInAnimation(rootView: View, fraction: Float) { + (rootView.getTag(R.id.tag_alpha_animator) as? ObjectAnimator)?.setCurrentFraction(fraction) + + if (rootView is ViewGroup) { + for (i in 0 until rootView.childCount) { + advanceFadeInAnimation(rootView.getChildAt(i), fraction) + } + } + } + private fun endAnimation(rootView: View) { (rootView.getTag(R.id.tag_animator) as? ObjectAnimator)?.end() @@ -1012,4 +1161,14 @@ ViewHierarchyAnimatorTest : SysuiTestCase() { } } } + + private fun endFadeInAnimation(rootView: View) { + (rootView.getTag(R.id.tag_alpha_animator) as? ObjectAnimator)?.end() + + if (rootView is ViewGroup) { + for (i in 0 until rootView.childCount) { + endFadeInAnimation(rootView.getChildAt(i)) + } + } + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceViewTest.kt new file mode 100644 index 000000000000..328ad39cddd5 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceViewTest.kt @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2022 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.systemui.biometrics + +import android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE +import android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import android.testing.TestableLooper.RunWithLooper +import android.view.View +import androidx.test.filters.SmallTest +import com.android.systemui.R +import com.android.systemui.SysuiTestCase +import com.google.common.truth.Truth.assertThat +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.never +import org.mockito.Mockito.verify +import org.mockito.junit.MockitoJUnit + +@RunWith(AndroidTestingRunner::class) +@RunWithLooper(setAsMainLooper = true) +@SmallTest +class AuthBiometricFingerprintAndFaceViewTest : SysuiTestCase() { + + @JvmField @Rule + var mockitoRule = MockitoJUnit.rule() + + @Mock + private lateinit var callback: AuthBiometricView.Callback + @Mock + private lateinit var panelController: AuthPanelController + + private lateinit var biometricView: AuthBiometricFingerprintAndFaceView + + @Before + fun setup() { + biometricView = R.layout.auth_biometric_fingerprint_and_face_view + .asTestAuthBiometricView(mContext, callback, panelController) + waitForIdleSync() + } + + @After + fun tearDown() { + biometricView.destroyDialog() + } + + @Test + fun fingerprintSuccessDoesNotRequireExplicitConfirmation() { + biometricView.onDialogAnimatedIn() + biometricView.onAuthenticationSucceeded(TYPE_FINGERPRINT) + waitForIdleSync() + + assertThat(biometricView.isAuthenticated).isTrue() + verify(callback).onAction(AuthBiometricView.Callback.ACTION_AUTHENTICATED) + } + + @Test + fun faceSuccessRequiresExplicitConfirmation() { + biometricView.onDialogAnimatedIn() + biometricView.onAuthenticationSucceeded(TYPE_FACE) + waitForIdleSync() + + assertThat(biometricView.isAuthenticated).isFalse() + assertThat(biometricView.isAuthenticating).isFalse() + assertThat(biometricView.mConfirmButton.visibility).isEqualTo(View.GONE) + verify(callback, never()).onAction(AuthBiometricView.Callback.ACTION_AUTHENTICATED) + + // icon acts as confirm button + biometricView.mIconView.performClick() + waitForIdleSync() + + assertThat(biometricView.isAuthenticated).isTrue() + verify(callback).onAction(AuthBiometricView.Callback.ACTION_AUTHENTICATED) + } + + @Test + fun ignoresFaceErrors() { + biometricView.onDialogAnimatedIn() + biometricView.onError(TYPE_FACE, "not a face") + waitForIdleSync() + + assertThat(biometricView.isAuthenticating).isTrue() + verify(callback, never()).onAction(AuthBiometricView.Callback.ACTION_ERROR) + + biometricView.onError(TYPE_FINGERPRINT, "that's a nope") + waitForIdleSync() + + verify(callback).onAction(AuthBiometricView.Callback.ACTION_ERROR) + } + + override fun waitForIdleSync() = TestableLooper.get(this).processAllMessages() +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintViewTest.kt new file mode 100644 index 000000000000..687cb517b2f4 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintViewTest.kt @@ -0,0 +1,269 @@ +/* + * Copyright (C) 2022 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.systemui.biometrics + +import android.hardware.biometrics.BiometricAuthenticator +import android.os.Bundle +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper +import android.testing.TestableLooper.RunWithLooper +import android.view.View +import androidx.test.filters.SmallTest +import com.android.systemui.R +import com.android.systemui.SysuiTestCase +import com.google.common.truth.Truth.assertThat +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers +import org.mockito.ArgumentMatchers.eq +import org.mockito.Mock +import org.mockito.Mockito.never +import org.mockito.Mockito.verify +import org.mockito.junit.MockitoJUnit + +@RunWith(AndroidTestingRunner::class) +@RunWithLooper(setAsMainLooper = true) +@SmallTest +class AuthBiometricFingerprintViewTest : SysuiTestCase() { + + @JvmField @Rule + val mockitoRule = MockitoJUnit.rule() + + @Mock + private lateinit var callback: AuthBiometricView.Callback + @Mock + private lateinit var panelController: AuthPanelController + + private lateinit var biometricView: AuthBiometricView + + private fun createView(allowDeviceCredential: Boolean = false): AuthBiometricFingerprintView { + val view = R.layout.auth_biometric_fingerprint_view.asTestAuthBiometricView( + mContext, callback, panelController, allowDeviceCredential = allowDeviceCredential + ) as AuthBiometricFingerprintView + waitForIdleSync() + return view + } + + @Before + fun setup() { + biometricView = createView() + } + + @After + fun tearDown() { + biometricView.destroyDialog() + } + + @Test + fun testOnAuthenticationSucceeded_noConfirmationRequired_sendsActionAuthenticated() { + biometricView.onAuthenticationSucceeded(BiometricAuthenticator.TYPE_FINGERPRINT) + waitForIdleSync() + + assertThat(biometricView.isAuthenticated).isTrue() + verify(callback).onAction(AuthBiometricView.Callback.ACTION_AUTHENTICATED) + } + + @Test + fun testOnAuthenticationSucceeded_confirmationRequired_updatesDialogContents() { + biometricView.setRequireConfirmation(true) + biometricView.onAuthenticationSucceeded(BiometricAuthenticator.TYPE_FINGERPRINT) + waitForIdleSync() + + // TODO: this should be tested in the subclasses + if (biometricView.supportsRequireConfirmation()) { + verify(callback, never()).onAction(ArgumentMatchers.anyInt()) + assertThat(biometricView.mNegativeButton.visibility).isEqualTo(View.GONE) + assertThat(biometricView.mCancelButton.visibility).isEqualTo(View.VISIBLE) + assertThat(biometricView.mCancelButton.isEnabled).isTrue() + assertThat(biometricView.mConfirmButton.isEnabled).isTrue() + assertThat(biometricView.mIndicatorView.text) + .isEqualTo(mContext.getText(R.string.biometric_dialog_tap_confirm)) + assertThat(biometricView.mIndicatorView.visibility).isEqualTo(View.VISIBLE) + } else { + assertThat(biometricView.isAuthenticated).isTrue() + verify(callback).onAction(eq(AuthBiometricView.Callback.ACTION_AUTHENTICATED)) + } + } + + @Test + fun testPositiveButton_sendsActionAuthenticated() { + biometricView.mConfirmButton.performClick() + waitForIdleSync() + + verify(callback).onAction(AuthBiometricView.Callback.ACTION_AUTHENTICATED) + assertThat(biometricView.isAuthenticated).isTrue() + } + + @Test + fun testNegativeButton_beforeAuthentication_sendsActionButtonNegative() { + biometricView.onDialogAnimatedIn() + biometricView.mNegativeButton.performClick() + waitForIdleSync() + + verify(callback).onAction(AuthBiometricView.Callback.ACTION_BUTTON_NEGATIVE) + } + + @Test + fun testCancelButton_whenPendingConfirmation_sendsActionUserCanceled() { + biometricView.setRequireConfirmation(true) + biometricView.onAuthenticationSucceeded(BiometricAuthenticator.TYPE_FINGERPRINT) + + assertThat(biometricView.mNegativeButton.visibility).isEqualTo(View.GONE) + biometricView.mCancelButton.performClick() + waitForIdleSync() + + verify(callback).onAction(AuthBiometricView.Callback.ACTION_USER_CANCELED) + } + + @Test + fun testTryAgainButton_sendsActionTryAgain() { + biometricView.mTryAgainButton.performClick() + waitForIdleSync() + + verify(callback).onAction(AuthBiometricView.Callback.ACTION_BUTTON_TRY_AGAIN) + assertThat(biometricView.mTryAgainButton.visibility).isEqualTo(View.GONE) + assertThat(biometricView.isAuthenticating).isTrue() + } + + @Test + fun testOnErrorSendsActionError() { + biometricView.onError(BiometricAuthenticator.TYPE_FACE, "testError") + waitForIdleSync() + + verify(callback).onAction(eq(AuthBiometricView.Callback.ACTION_ERROR)) + } + + @Test + fun testOnErrorShowsMessage() { + // prevent error state from instantly returning to authenticating in the test + biometricView.mAnimationDurationHideDialog = 10_000 + + val message = "another error" + biometricView.onError(BiometricAuthenticator.TYPE_FACE, message) + waitForIdleSync() + + assertThat(biometricView.isAuthenticating).isFalse() + assertThat(biometricView.isAuthenticated).isFalse() + assertThat(biometricView.mIndicatorView.visibility).isEqualTo(View.VISIBLE) + assertThat(biometricView.mIndicatorView.text).isEqualTo(message) + } + + @Test + fun testBackgroundClicked_sendsActionUserCanceled() { + val view = View(mContext) + biometricView.setBackgroundView(view) + view.performClick() + + verify(callback).onAction(eq(AuthBiometricView.Callback.ACTION_USER_CANCELED)) + } + + @Test + fun testBackgroundClicked_afterAuthenticated_neverSendsUserCanceled() { + val view = View(mContext) + biometricView.setBackgroundView(view) + biometricView.onAuthenticationSucceeded(BiometricAuthenticator.TYPE_FINGERPRINT) + view.performClick() + + verify(callback, never()) + .onAction(eq(AuthBiometricView.Callback.ACTION_USER_CANCELED)) + } + + @Test + fun testBackgroundClicked_whenSmallDialog_neverSendsUserCanceled() { + biometricView.mLayoutParams = AuthDialog.LayoutParams(0, 0) + biometricView.updateSize(AuthDialog.SIZE_SMALL) + val view = View(mContext) + biometricView.setBackgroundView(view) + view.performClick() + + verify(callback, never()).onAction(eq(AuthBiometricView.Callback.ACTION_USER_CANCELED)) + } + + @Test + fun testIgnoresUselessHelp() { + biometricView.mAnimationDurationHideDialog = 10_000 + biometricView.onDialogAnimatedIn() + waitForIdleSync() + + assertThat(biometricView.isAuthenticating).isTrue() + + val helpText = biometricView.mIndicatorView.text + biometricView.onHelp(BiometricAuthenticator.TYPE_FINGERPRINT, "") + waitForIdleSync() + + // text should not change + assertThat(biometricView.mIndicatorView.text).isEqualTo(helpText) + verify(callback, never()).onAction(eq(AuthBiometricView.Callback.ACTION_ERROR)) + } + + @Test + fun testRestoresState() { + val requireConfirmation = true + biometricView.mAnimationDurationHideDialog = 10_000 + val failureMessage = "testFailureMessage" + biometricView.setRequireConfirmation(requireConfirmation) + biometricView.onAuthenticationFailed(BiometricAuthenticator.TYPE_FACE, failureMessage) + waitForIdleSync() + + val state = Bundle() + biometricView.onSaveState(state) + assertThat(biometricView.mTryAgainButton.visibility).isEqualTo(View.GONE) + assertThat(state.getInt(AuthDialog.KEY_BIOMETRIC_TRY_AGAIN_VISIBILITY)) + .isEqualTo(View.GONE) + assertThat(state.getInt(AuthDialog.KEY_BIOMETRIC_STATE)) + .isEqualTo(AuthBiometricView.STATE_ERROR) + assertThat(biometricView.mIndicatorView.visibility).isEqualTo(View.VISIBLE) + assertThat(state.getBoolean(AuthDialog.KEY_BIOMETRIC_INDICATOR_ERROR_SHOWING)).isTrue() + assertThat(biometricView.mIndicatorView.text).isEqualTo(failureMessage) + assertThat(state.getString(AuthDialog.KEY_BIOMETRIC_INDICATOR_STRING)) + .isEqualTo(failureMessage) + + // TODO: Test dialog size. Should move requireConfirmation to buildBiometricPromptBundle + + // Create new dialog and restore the previous state into it + biometricView.destroyDialog() + biometricView = createView() + biometricView.restoreState(state) + biometricView.mAnimationDurationHideDialog = 10_000 + biometricView.setRequireConfirmation(requireConfirmation) + waitForIdleSync() + + assertThat(biometricView.mTryAgainButton.visibility).isEqualTo(View.GONE) + assertThat(biometricView.mIndicatorView.visibility).isEqualTo(View.VISIBLE) + + // TODO: Test restored text. Currently cannot test this, since it gets restored only after + // dialog size is known. + } + + @Test + fun testCredentialButton_whenDeviceCredentialAllowed() { + biometricView.destroyDialog() + biometricView = createView(allowDeviceCredential = true) + + assertThat(biometricView.mUseCredentialButton.visibility).isEqualTo(View.VISIBLE) + assertThat(biometricView.mNegativeButton.visibility).isEqualTo(View.GONE) + + biometricView.mUseCredentialButton.performClick() + waitForIdleSync() + + verify(callback).onAction(AuthBiometricView.Callback.ACTION_USE_DEVICE_CREDENTIAL) + } + + override fun waitForIdleSync() = TestableLooper.get(this).processAllMessages() +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java deleted file mode 100644 index f99b20d47ab8..000000000000 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright (C) 2019 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.systemui.biometrics; - -import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE; -import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT; -import static android.hardware.biometrics.BiometricManager.Authenticators; - -import static com.android.systemui.biometrics.AuthBiometricView.Callback.ACTION_AUTHENTICATED; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; - -import android.hardware.biometrics.PromptInfo; -import android.os.Bundle; -import android.test.suitebuilder.annotation.SmallTest; -import android.testing.AndroidTestingRunner; -import android.testing.TestableLooper; -import android.testing.TestableLooper.RunWithLooper; -import android.testing.ViewUtils; -import android.view.LayoutInflater; -import android.view.View; - -import com.android.systemui.R; -import com.android.systemui.SysuiTestCase; - -import org.junit.After; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -@RunWith(AndroidTestingRunner.class) -@RunWithLooper -@SmallTest -public class AuthBiometricViewTest extends SysuiTestCase { - - @Rule - public final MockitoRule mMockitoRule = MockitoJUnit.rule(); - - @Mock - private AuthBiometricView.Callback mCallback; - @Mock - private AuthPanelController mPanelController; - - private AuthBiometricView mBiometricView; - - @After - public void tearDown() { - destroyDialog(); - } - - @Test - public void testOnAuthenticationSucceeded_noConfirmationRequired_sendsActionAuthenticated() { - initDialog(false /* allowDeviceCredential */, mCallback); - - // The onAuthenticated runnable is posted when authentication succeeds. - mBiometricView.onAuthenticationSucceeded(TYPE_FINGERPRINT); - waitForIdleSync(); - assertEquals(AuthBiometricView.STATE_AUTHENTICATED, mBiometricView.mState); - verify(mCallback).onAction(ACTION_AUTHENTICATED); - } - - @Test - public void testOnAuthenticationSucceeded_confirmationRequired_updatesDialogContents() { - initDialog(false /* allowDeviceCredential */, mCallback); - - mBiometricView.setRequireConfirmation(true); - mBiometricView.onAuthenticationSucceeded(TYPE_FINGERPRINT); - waitForIdleSync(); - - // TODO: this should be tested in the subclasses - if (mBiometricView.supportsRequireConfirmation()) { - assertEquals(AuthBiometricView.STATE_PENDING_CONFIRMATION, mBiometricView.mState); - - verify(mCallback, never()).onAction(anyInt()); - - assertEquals(View.GONE, mBiometricView.mNegativeButton.getVisibility()); - assertEquals(View.VISIBLE, mBiometricView.mCancelButton.getVisibility()); - assertTrue(mBiometricView.mCancelButton.isEnabled()); - - assertTrue(mBiometricView.mConfirmButton.isEnabled()); - assertEquals(mContext.getText(R.string.biometric_dialog_tap_confirm), - mBiometricView.mIndicatorView.getText()); - assertEquals(View.VISIBLE, mBiometricView.mIndicatorView.getVisibility()); - } else { - assertEquals(AuthBiometricView.STATE_AUTHENTICATED, mBiometricView.mState); - verify(mCallback).onAction(eq(ACTION_AUTHENTICATED)); - } - - } - - @Test - public void testPositiveButton_sendsActionAuthenticated() { - initDialog(false /* allowDeviceCredential */, mCallback); - - mBiometricView.mConfirmButton.performClick(); - waitForIdleSync(); - - verify(mCallback).onAction(ACTION_AUTHENTICATED); - assertEquals(AuthBiometricView.STATE_AUTHENTICATED, mBiometricView.mState); - } - - @Test - public void testNegativeButton_beforeAuthentication_sendsActionButtonNegative() { - initDialog(false /* allowDeviceCredential */, mCallback); - - mBiometricView.onDialogAnimatedIn(); - mBiometricView.mNegativeButton.performClick(); - waitForIdleSync(); - - verify(mCallback).onAction(AuthBiometricView.Callback.ACTION_BUTTON_NEGATIVE); - } - - @Test - public void testCancelButton_whenPendingConfirmation_sendsActionUserCanceled() { - initDialog(false /* allowDeviceCredential */, mCallback); - - mBiometricView.setRequireConfirmation(true); - mBiometricView.onAuthenticationSucceeded(TYPE_FINGERPRINT); - - assertEquals(View.GONE, mBiometricView.mNegativeButton.getVisibility()); - - mBiometricView.mCancelButton.performClick(); - waitForIdleSync(); - - verify(mCallback).onAction(AuthBiometricView.Callback.ACTION_USER_CANCELED); - } - - @Test - public void testTryAgainButton_sendsActionTryAgain() { - initDialog(false /* allowDeviceCredential */, mCallback); - - mBiometricView.mTryAgainButton.performClick(); - waitForIdleSync(); - - verify(mCallback).onAction(AuthBiometricView.Callback.ACTION_BUTTON_TRY_AGAIN); - assertEquals(AuthBiometricView.STATE_AUTHENTICATING, mBiometricView.mState); - } - - @Test - @Ignore("flaky, b/189031816") - public void testError_sendsActionError() { - initDialog(false /* allowDeviceCredential */, mCallback); - final String testError = "testError"; - mBiometricView.onError(TYPE_FACE, testError); - waitForIdleSync(); - - verify(mCallback).onAction(eq(AuthBiometricView.Callback.ACTION_ERROR)); - assertEquals(AuthBiometricView.STATE_IDLE, mBiometricView.mState); - } - - @Test - public void testBackgroundClicked_sendsActionUserCanceled() { - initDialog(false /* allowDeviceCredential */, mCallback); - - View view = new View(mContext); - mBiometricView.setBackgroundView(view); - view.performClick(); - verify(mCallback).onAction(eq(AuthBiometricView.Callback.ACTION_USER_CANCELED)); - } - - @Test - public void testBackgroundClicked_afterAuthenticated_neverSendsUserCanceled() { - initDialog(false /* allowDeviceCredential */, mCallback); - - View view = new View(mContext); - mBiometricView.setBackgroundView(view); - mBiometricView.onAuthenticationSucceeded(TYPE_FINGERPRINT); - view.performClick(); - verify(mCallback, never()).onAction(eq(AuthBiometricView.Callback.ACTION_USER_CANCELED)); - } - - @Test - public void testBackgroundClicked_whenSmallDialog_neverSendsUserCanceled() { - initDialog(false /* allowDeviceCredential */, mCallback); - mBiometricView.mLayoutParams = new AuthDialog.LayoutParams(0, 0); - mBiometricView.updateSize(AuthDialog.SIZE_SMALL); - - View view = new View(mContext); - mBiometricView.setBackgroundView(view); - view.performClick(); - verify(mCallback, never()).onAction(eq(AuthBiometricView.Callback.ACTION_USER_CANCELED)); - } - - @Test - public void testIgnoresUselessHelp() { - initDialog(false /* allowDeviceCredential */, mCallback); - - mBiometricView.onDialogAnimatedIn(); - waitForIdleSync(); - - assertEquals(AuthBiometricView.STATE_AUTHENTICATING, mBiometricView.mState); - - mBiometricView.onHelp(TYPE_FINGERPRINT, ""); - waitForIdleSync(); - - assertEquals("", mBiometricView.mIndicatorView.getText()); - verify(mCallback, never()).onAction(eq(AuthBiometricView.Callback.ACTION_ERROR)); - assertEquals(AuthBiometricView.STATE_AUTHENTICATING, mBiometricView.mState); - } - - @Test - public void testRestoresState() { - final boolean requireConfirmation = true; - - initDialog(false /* allowDeviceCredential */, mCallback, null, 10000); - - final String failureMessage = "testFailureMessage"; - mBiometricView.setRequireConfirmation(requireConfirmation); - mBiometricView.onAuthenticationFailed(TYPE_FACE, failureMessage); - waitForIdleSync(); - - Bundle state = new Bundle(); - mBiometricView.onSaveState(state); - - assertEquals(View.GONE, mBiometricView.mTryAgainButton.getVisibility()); - assertEquals(View.GONE, state.getInt(AuthDialog.KEY_BIOMETRIC_TRY_AGAIN_VISIBILITY)); - - assertEquals(AuthBiometricView.STATE_ERROR, mBiometricView.mState); - assertEquals(AuthBiometricView.STATE_ERROR, state.getInt(AuthDialog.KEY_BIOMETRIC_STATE)); - - assertEquals(View.VISIBLE, mBiometricView.mIndicatorView.getVisibility()); - assertTrue(state.getBoolean(AuthDialog.KEY_BIOMETRIC_INDICATOR_ERROR_SHOWING)); - - assertEquals(failureMessage, mBiometricView.mIndicatorView.getText()); - assertEquals(failureMessage, state.getString(AuthDialog.KEY_BIOMETRIC_INDICATOR_STRING)); - - // TODO: Test dialog size. Should move requireConfirmation to buildBiometricPromptBundle - - // Create new dialog and restore the previous state into it - destroyDialog(); - initDialog(false /* allowDeviceCredential */, mCallback, state, 10000); - mBiometricView.mAnimationDurationHideDialog = 10000; - mBiometricView.setRequireConfirmation(requireConfirmation); - waitForIdleSync(); - - assertEquals(View.GONE, mBiometricView.mTryAgainButton.getVisibility()); - assertEquals(AuthBiometricView.STATE_ERROR, mBiometricView.mState); - assertEquals(View.VISIBLE, mBiometricView.mIndicatorView.getVisibility()); - - // TODO: Test restored text. Currently cannot test this, since it gets restored only after - // dialog size is known. - } - - @Test - public void testCredentialButton_whenDeviceCredentialAllowed() throws InterruptedException { - initDialog(true /* allowDeviceCredential */, mCallback); - - assertEquals(View.VISIBLE, mBiometricView.mUseCredentialButton.getVisibility()); - assertEquals(View.GONE, mBiometricView.mNegativeButton.getVisibility()); - mBiometricView.mUseCredentialButton.performClick(); - waitForIdleSync(); - - verify(mCallback).onAction(AuthBiometricView.Callback.ACTION_USE_DEVICE_CREDENTIAL); - } - - private PromptInfo buildPromptInfo(boolean allowDeviceCredential) { - PromptInfo promptInfo = new PromptInfo(); - promptInfo.setTitle("Title"); - int authenticators = Authenticators.BIOMETRIC_WEAK; - if (allowDeviceCredential) { - authenticators |= Authenticators.DEVICE_CREDENTIAL; - } else { - promptInfo.setNegativeButtonText("Negative"); - } - promptInfo.setAuthenticators(authenticators); - return promptInfo; - } - - private void initDialog(boolean allowDeviceCredential, AuthBiometricView.Callback callback) { - initDialog(allowDeviceCredential, callback, - null /* savedState */, 0 /* hideDelay */); - } - - private void initDialog(boolean allowDeviceCredential, - AuthBiometricView.Callback callback, Bundle savedState, int hideDelay) { - final LayoutInflater inflater = LayoutInflater.from(mContext); - mBiometricView = (AuthBiometricView) inflater.inflate( - R.layout.auth_biometric_view, null, false); - mBiometricView.mAnimationDurationLong = 0; - mBiometricView.mAnimationDurationShort = 0; - mBiometricView.mAnimationDurationHideDialog = hideDelay; - mBiometricView.setPromptInfo(buildPromptInfo(allowDeviceCredential)); - mBiometricView.setCallback(callback); - mBiometricView.restoreState(savedState); - ViewUtils.attachView(mBiometricView); - mBiometricView.setPanelController(mPanelController); - waitForIdleSync(); - } - - private void destroyDialog() { - if (mBiometricView != null && mBiometricView.isAttachedToWindow()) { - ViewUtils.detachView(mBiometricView); - } - } - - @Override - protected void waitForIdleSync() { - TestableLooper.get(this).processAllMessages(); - super.waitForIdleSync(); - } -} diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt index 52b5857a2106..bc5a4d3d274e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt @@ -16,13 +16,11 @@ package com.android.systemui.biometrics import android.app.admin.DevicePolicyManager +import android.hardware.biometrics.BiometricAuthenticator import android.hardware.biometrics.BiometricConstants import android.hardware.biometrics.BiometricManager -import android.hardware.biometrics.ComponentInfoInternal import android.hardware.biometrics.PromptInfo -import android.hardware.biometrics.SensorProperties import android.hardware.face.FaceSensorPropertiesInternal -import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal import android.os.Handler import android.os.IBinder @@ -36,11 +34,11 @@ import android.view.WindowInsets import android.view.WindowManager import android.widget.ScrollView import androidx.test.filters.SmallTest +import com.android.internal.jank.InteractionJankMonitor import com.android.internal.widget.LockPatternUtils import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.keyguard.WakefulnessLifecycle -import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat @@ -57,12 +55,12 @@ import org.mockito.junit.MockitoJUnit import org.mockito.Mockito.`when` as whenever @RunWith(AndroidTestingRunner::class) -@RunWithLooper +@RunWithLooper(setAsMainLooper = true) @SmallTest class AuthContainerViewTest : SysuiTestCase() { @JvmField @Rule - var rule = MockitoJUnit.rule() + var mockitoRule = MockitoJUnit.rule() @Mock lateinit var callback: AuthDialogCallback @@ -74,6 +72,8 @@ class AuthContainerViewTest : SysuiTestCase() { lateinit var wakefulnessLifecycle: WakefulnessLifecycle @Mock lateinit var windowToken: IBinder + @Mock + lateinit var interactionJankMonitor: InteractionJankMonitor private var authContainer: TestAuthContainerView? = null @@ -86,13 +86,13 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testNotifiesAnimatedIn() { - initializeContainer() + initializeFingerprintContainer() verify(callback).onDialogAnimatedIn() } @Test fun testIgnoresAnimatedInWhenDismissed() { - val container = initializeContainer(addToView = false) + val container = initializeFingerprintContainer(addToView = false) container.dismissFromSystemServer() waitForIdleSync() @@ -107,7 +107,7 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testDismissesOnFocusLoss() { - val container = initializeContainer() + val container = initializeFingerprintContainer() waitForIdleSync() verify(callback).onDialogAnimatedIn() @@ -124,7 +124,7 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testActionAuthenticated_sendsDismissedAuthenticated() { - val container = initializeContainer() + val container = initializeFingerprintContainer() container.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_AUTHENTICATED ) @@ -139,7 +139,7 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testActionUserCanceled_sendsDismissedUserCanceled() { - val container = initializeContainer() + val container = initializeFingerprintContainer() container.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_USER_CANCELED ) @@ -157,7 +157,7 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testActionButtonNegative_sendsDismissedButtonNegative() { - val container = initializeContainer() + val container = initializeFingerprintContainer() container.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_BUTTON_NEGATIVE ) @@ -172,7 +172,9 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testActionTryAgain_sendsTryAgain() { - val container = initializeContainer(BiometricManager.Authenticators.BIOMETRIC_WEAK) + val container = initializeFingerprintContainer( + authenticators = BiometricManager.Authenticators.BIOMETRIC_WEAK + ) container.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_BUTTON_TRY_AGAIN ) @@ -183,8 +185,8 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testActionError_sendsDismissedError() { - val container = initializeContainer() - authContainer!!.mBiometricCallback.onAction( + val container = initializeFingerprintContainer() + container.mBiometricCallback.onAction( AuthBiometricView.Callback.ACTION_ERROR ) waitForIdleSync() @@ -198,8 +200,8 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testActionUseDeviceCredential_sendsOnDeviceCredentialPressed() { - val container = initializeContainer( - BiometricManager.Authenticators.BIOMETRIC_WEAK or + val container = initializeFingerprintContainer( + authenticators = BiometricManager.Authenticators.BIOMETRIC_WEAK or BiometricManager.Authenticators.DEVICE_CREDENTIAL ) container.mBiometricCallback.onAction( @@ -213,8 +215,8 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testAnimateToCredentialUI_invokesStartTransitionToCredentialUI() { - val container = initializeContainer( - BiometricManager.Authenticators.BIOMETRIC_WEAK or + val container = initializeFingerprintContainer( + authenticators = BiometricManager.Authenticators.BIOMETRIC_WEAK or BiometricManager.Authenticators.DEVICE_CREDENTIAL ) container.animateToCredentialUI() @@ -225,7 +227,7 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testShowBiometricUI() { - val container = initializeContainer() + val container = initializeFingerprintContainer() waitForIdleSync() @@ -235,7 +237,9 @@ class AuthContainerViewTest : SysuiTestCase() { @Test fun testShowCredentialUI() { - val container = initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) + val container = initializeFingerprintContainer( + authenticators = BiometricManager.Authenticators.DEVICE_CREDENTIAL + ) waitForIdleSync() assertThat(container.hasCredentialView()).isTrue() @@ -249,7 +253,9 @@ class AuthContainerViewTest : SysuiTestCase() { DevicePolicyManager.PASSWORD_QUALITY_SOMETHING ) - val container = initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) + val container = initializeFingerprintContainer( + authenticators = BiometricManager.Authenticators.DEVICE_CREDENTIAL + ) waitForIdleSync() assertThat(container.hasCredentialPatternView()).isTrue() @@ -266,7 +272,9 @@ class AuthContainerViewTest : SysuiTestCase() { // In the credential view, clicking on the background (to cancel authentication) is not // valid. Thus, the listener should be null, and it should not be in the accessibility // hierarchy. - val container = initializeContainer(BiometricManager.Authenticators.DEVICE_CREDENTIAL) + val container = initializeFingerprintContainer( + authenticators = BiometricManager.Authenticators.DEVICE_CREDENTIAL + ) waitForIdleSync() assertThat(container.hasCredentialPasswordView()).isTrue() @@ -294,49 +302,52 @@ class AuthContainerViewTest : SysuiTestCase() { assertThat((layoutParams.fitInsetsTypes and WindowInsets.Type.ime()) == 0).isTrue() } - private fun initializeContainer( + @Test + fun coexFaceRestartsOnTouch() { + val container = initializeCoexContainer() + + container.onPointerDown() + waitForIdleSync() + + container.onAuthenticationFailed(BiometricAuthenticator.TYPE_FACE, "failed") + waitForIdleSync() + + verify(callback, never()).onTryAgainPressed() + + container.onPointerDown() + waitForIdleSync() + + verify(callback).onTryAgainPressed() + } + + private fun initializeFingerprintContainer( + authenticators: Int = BiometricManager.Authenticators.BIOMETRIC_WEAK, + addToView: Boolean = true + ) = initializeContainer( + TestAuthContainerView( + authenticators = authenticators, + fingerprintProps = fingerprintSensorPropertiesInternal() + ), + addToView + ) + + private fun initializeCoexContainer( authenticators: Int = BiometricManager.Authenticators.BIOMETRIC_WEAK, addToView: Boolean = true + ) = initializeContainer( + TestAuthContainerView( + authenticators = authenticators, + fingerprintProps = fingerprintSensorPropertiesInternal(), + faceProps = faceSensorPropertiesInternal() + ), + addToView + ) + + private fun initializeContainer( + view: TestAuthContainerView, + addToView: Boolean ): TestAuthContainerView { - val config = AuthContainerView.Config() - config.mContext = mContext - config.mCallback = callback - config.mSensorIds = intArrayOf(0) - config.mSkipAnimation = true - config.mPromptInfo = PromptInfo() - config.mPromptInfo.authenticators = authenticators - val componentInfo = listOf( - ComponentInfoInternal( - "faceSensor" /* componentId */, - "vendor/model/revision" /* hardwareVersion */, "1.01" /* firmwareVersion */, - "00000001" /* serialNumber */, "" /* softwareVersion */ - ), - ComponentInfoInternal( - "matchingAlgorithm" /* componentId */, - "" /* hardwareVersion */, "" /* firmwareVersion */, "" /* serialNumber */, - "vendor/version/revision" /* softwareVersion */ - ) - ) - val fpProps = listOf( - FingerprintSensorPropertiesInternal( - 0, - SensorProperties.STRENGTH_STRONG, - 5 /* maxEnrollmentsPerUser */, - componentInfo, - FingerprintSensorProperties.TYPE_REAR, - false /* resetLockoutRequiresHardwareAuthToken */ - ) - ) - authContainer = TestAuthContainerView( - config, - fpProps, - listOf(), - wakefulnessLifecycle, - userManager, - lockPatternUtils, - Handler(TestableLooper.get(this).looper), - FakeExecutor(FakeSystemClock()) - ) + authContainer = view if (addToView) { authContainer!!.addToView() @@ -346,27 +357,35 @@ class AuthContainerViewTest : SysuiTestCase() { } private inner class TestAuthContainerView( - config: Config, - fpProps: List<FingerprintSensorPropertiesInternal>, - faceProps: List<FaceSensorPropertiesInternal>, - wakefulnessLifecycle: WakefulnessLifecycle, - userManager: UserManager, - lockPatternUtils: LockPatternUtils, - mainHandler: Handler, - bgExecutor: DelayableExecutor + authenticators: Int = BiometricManager.Authenticators.BIOMETRIC_WEAK, + fingerprintProps: List<FingerprintSensorPropertiesInternal> = listOf(), + faceProps: List<FaceSensorPropertiesInternal> = listOf() ) : AuthContainerView( - config, fpProps, faceProps, - wakefulnessLifecycle, userManager, lockPatternUtils, mainHandler, bgExecutor + Config().apply { + mContext = this@AuthContainerViewTest.context + mCallback = callback + mSensorIds = (fingerprintProps.map { it.sensorId } + + faceProps.map { it.sensorId }).toIntArray() + mSkipAnimation = true + mPromptInfo = PromptInfo().apply { + this.authenticators = authenticators + } + }, + fingerprintProps, + faceProps, + wakefulnessLifecycle, + userManager, + lockPatternUtils, + interactionJankMonitor, + Handler(TestableLooper.get(this).looper), + FakeExecutor(FakeSystemClock()) ) { override fun postOnAnimation(runnable: Runnable) { runnable.run() } } - override fun waitForIdleSync() { - TestableLooper.get(this).processAllMessages() - super.waitForIdleSync() - } + override fun waitForIdleSync() = TestableLooper.get(this).processAllMessages() private fun AuthContainerView.addToView() { ViewUtils.attachView(this) diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java index eefc412e3ffa..d948a99f8ad8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java @@ -77,6 +77,7 @@ import android.view.WindowManager; import androidx.test.filters.SmallTest; import com.android.internal.R; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.widget.LockPatternUtils; import com.android.systemui.SysuiTestCase; import com.android.systemui.keyguard.WakefulnessLifecycle; @@ -150,6 +151,8 @@ public class AuthControllerTest extends SysuiTestCase { private LockPatternUtils mLockPatternUtils; @Mock private StatusBarStateController mStatusBarStateController; + @Mock + private InteractionJankMonitor mInteractionJankMonitor; @Captor ArgumentCaptor<IFingerprintAuthenticatorsRegisteredCallback> mAuthenticatorsRegisteredCaptor; @Captor @@ -788,8 +791,8 @@ public class AuthControllerTest extends SysuiTestCase { super(context, execution, commandQueue, activityTaskManager, windowManager, fingerprintManager, faceManager, udfpsControllerFactory, sidefpsControllerFactory, mDisplayManager, mWakefulnessLifecycle, - mUserManager, mLockPatternUtils, statusBarStateController, mHandler, - mBackgroundExecutor); + mUserManager, mLockPatternUtils, statusBarStateController, + mInteractionJankMonitor, mHandler, mBackgroundExecutor); } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt index 7f8656c1ecbc..d6afd6d192ec 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthRippleControllerTest.kt @@ -292,7 +292,7 @@ class AuthRippleControllerTest : SysuiTestCase() { @Test @RunWithLooper(setAsMainLooper = true) - fun testAnimatorRunWhenWakeAndUnlock() { + fun testAnimatorRunWhenWakeAndUnlock_fingerprint() { val fpsLocation = PointF(5f, 5f) `when`(authController.fingerprintSensorLocation).thenReturn(fpsLocation) controller.onViewAttached() @@ -309,6 +309,25 @@ class AuthRippleControllerTest : SysuiTestCase() { } @Test + @RunWithLooper(setAsMainLooper = true) + fun testAnimatorRunWhenWakeAndUnlock_faceUdfpsFingerDown() { + val faceLocation = PointF(5f, 5f) + `when`(authController.faceAuthSensorLocation).thenReturn(faceLocation) + controller.onViewAttached() + `when`(keyguardUpdateMonitor.isKeyguardVisible).thenReturn(true) + `when`(biometricUnlockController.isWakeAndUnlock).thenReturn(true) + `when`(authController.isUdfpsFingerDown).thenReturn(true) + + controller.showUnlockRipple(BiometricSourceType.FACE) + assertTrue("reveal didn't start on keyguardFadingAway", + controller.startLightRevealScrimOnKeyguardFadingAway) + `when`(keyguardStateController.isKeyguardFadingAway).thenReturn(true) + controller.onKeyguardFadingAwayChanged() + assertFalse("reveal triggers multiple times", + controller.startLightRevealScrimOnKeyguardFadingAway) + } + + @Test fun testUpdateRippleColor() { controller.onViewAttached() val captor = ArgumentCaptor diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricTestExtensions.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricTestExtensions.kt index 92c2a1b9b23a..8820c164cba4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricTestExtensions.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricTestExtensions.kt @@ -16,29 +16,123 @@ package com.android.systemui.biometrics +import android.annotation.IdRes +import android.content.Context +import android.hardware.biometrics.BiometricManager import android.hardware.biometrics.ComponentInfoInternal -import android.hardware.biometrics.SensorLocationInternal +import android.hardware.biometrics.PromptInfo import android.hardware.biometrics.SensorProperties +import android.hardware.face.FaceSensorPropertiesInternal +import android.hardware.face.FaceSensorProperties import android.hardware.fingerprint.FingerprintSensorProperties import android.hardware.fingerprint.FingerprintSensorPropertiesInternal +import android.os.Bundle -/** Creates properties from the sensor location with test values. */ -fun SensorLocationInternal.asFingerprintSensorProperties( - sensorId: Int = 22, - @SensorProperties.Strength sensorStrength: Int = SensorProperties.STRENGTH_WEAK, - @FingerprintSensorProperties.SensorType sensorType: Int = - FingerprintSensorProperties.TYPE_UDFPS_OPTICAL, - maxEnrollmentsPerUser: Int = 1, - halControlsIllumination: Boolean = true, - info: List<ComponentInfoInternal> = listOf(ComponentInfoInternal("a", "b", "c", "d", "e")), - resetLockoutRequiresHardwareAuthToken: Boolean = false -) = FingerprintSensorPropertiesInternal( - sensorId, - sensorStrength, - maxEnrollmentsPerUser, - info, - sensorType, - halControlsIllumination, - resetLockoutRequiresHardwareAuthToken, - listOf(this) -) +import android.testing.ViewUtils +import android.view.LayoutInflater + +/** + * Inflate the given BiometricPrompt layout and initialize it with test parameters. + * + * This attaches the view so be sure to call [destroyDialog] at the end of the test. + */ +@IdRes +internal fun <T : AuthBiometricView> Int.asTestAuthBiometricView( + context: Context, + callback: AuthBiometricView.Callback, + panelController: AuthPanelController, + allowDeviceCredential: Boolean = false, + savedState: Bundle? = null, + hideDelay: Int = 0 +): T { + val view = LayoutInflater.from(context).inflate(this, null, false) as T + view.mAnimationDurationLong = 0 + view.mAnimationDurationShort = 0 + view.mAnimationDurationHideDialog = hideDelay + view.setPromptInfo(buildPromptInfo(allowDeviceCredential)) + view.setCallback(callback) + view.restoreState(savedState) + view.setPanelController(panelController) + + ViewUtils.attachView(view) + + return view +} + +private fun buildPromptInfo(allowDeviceCredential: Boolean): PromptInfo { + val promptInfo = PromptInfo() + promptInfo.title = "Title" + var authenticators = BiometricManager.Authenticators.BIOMETRIC_WEAK + if (allowDeviceCredential) { + authenticators = authenticators or BiometricManager.Authenticators.DEVICE_CREDENTIAL + } else { + promptInfo.negativeButtonText = "Negative" + } + promptInfo.authenticators = authenticators + return promptInfo +} + +/** Detach the view, if needed. */ +internal fun AuthBiometricView?.destroyDialog() { + if (this != null && isAttachedToWindow) { + ViewUtils.detachView(this) + } +} + +/** Create [FingerprintSensorPropertiesInternal] for a test. */ +internal fun fingerprintSensorPropertiesInternal( + ids: List<Int> = listOf(0) +): List<FingerprintSensorPropertiesInternal> { + val componentInfo = listOf( + ComponentInfoInternal( + "fingerprintSensor" /* componentId */, + "vendor/model/revision" /* hardwareVersion */, "1.01" /* firmwareVersion */, + "00000001" /* serialNumber */, "" /* softwareVersion */ + ), + ComponentInfoInternal( + "matchingAlgorithm" /* componentId */, + "" /* hardwareVersion */, "" /* firmwareVersion */, "" /* serialNumber */, + "vendor/version/revision" /* softwareVersion */ + ) + ) + return ids.map { id -> + FingerprintSensorPropertiesInternal( + id, + SensorProperties.STRENGTH_STRONG, + 5 /* maxEnrollmentsPerUser */, + componentInfo, + FingerprintSensorProperties.TYPE_REAR, + false /* resetLockoutRequiresHardwareAuthToken */ + ) + } +} + +/** Create [FaceSensorPropertiesInternal] for a test. */ +internal fun faceSensorPropertiesInternal( + ids: List<Int> = listOf(1) +): List<FaceSensorPropertiesInternal> { + val componentInfo = listOf( + ComponentInfoInternal( + "faceSensor" /* componentId */, + "vendor/model/revision" /* hardwareVersion */, "1.01" /* firmwareVersion */, + "00000001" /* serialNumber */, "" /* softwareVersion */ + ), + ComponentInfoInternal( + "matchingAlgorithm" /* componentId */, + "" /* hardwareVersion */, "" /* firmwareVersion */, "" /* serialNumber */, + "vendor/version/revision" /* softwareVersion */ + ) + ) + return ids.map { id -> + FaceSensorPropertiesInternal( + id, + SensorProperties.STRENGTH_STRONG, + 2 /* maxEnrollmentsPerUser */, + componentInfo, + FaceSensorProperties.TYPE_RGB, + true /* supportsFaceDetection */, + true /* supportsSelfIllumination */, + false /* resetLockoutRequiresHardwareAuthToken */ + ) + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java index 946c52e8ee5b..09dc8e4fdb8e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java @@ -586,6 +586,7 @@ public class UdfpsControllerTest extends SysuiTestCase { // Configure UdfpsView to accept the ACTION_DOWN event when(mUdfpsView.isIlluminationRequested()).thenReturn(false); when(mUdfpsView.isWithinSensorArea(anyFloat(), anyFloat())).thenReturn(true); + when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); // GIVEN that the overlay is showing mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, TEST_UDFPS_SENSOR_ID, @@ -603,6 +604,7 @@ public class UdfpsControllerTest extends SysuiTestCase { mTouchListenerCaptor.getValue().onTouch(mUdfpsView, moveEvent); mBiometricsExecutor.runAllReady(); moveEvent.recycle(); + mFgExecutor.runAllReady(); // THEN FingerprintManager is notified about onPointerDown verify(mAlternateTouchProvider).onPointerDown(eq(TEST_REQUEST_ID), eq(0), eq(0), eq(0f), eq(0f)); @@ -612,6 +614,7 @@ public class UdfpsControllerTest extends SysuiTestCase { // AND illumination begins verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture()); verify(mLatencyTracker, never()).onActionEnd(eq(LatencyTracker.ACTION_UDFPS_ILLUMINATE)); + verify(mKeyguardUpdateMonitor).onUdfpsPointerDown(eq((int) TEST_REQUEST_ID)); // AND onIlluminatedRunnable notifies FingerprintManager about onUiReady mOnIlluminatedRunnableCaptor.getValue().run(); mBiometricsExecutor.runAllReady(); @@ -630,6 +633,7 @@ public class UdfpsControllerTest extends SysuiTestCase { when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); // WHEN fingerprint is requested because of AOD interrupt mUdfpsController.onAodInterrupt(0, 0, 2f, 3f); + mFgExecutor.runAllReady(); // THEN illumination begins // AND onIlluminatedRunnable that notifies FingerprintManager is set verify(mUdfpsView).startIllumination(mOnIlluminatedRunnableCaptor.capture()); @@ -639,6 +643,7 @@ public class UdfpsControllerTest extends SysuiTestCase { eq(0), eq(0), eq(3f) /* minor */, eq(2f) /* major */); verify(mFingerprintManager, never()).onPointerDown(anyLong(), anyInt(), anyInt(), anyInt(), anyFloat(), anyFloat()); + verify(mKeyguardUpdateMonitor).onUdfpsPointerDown(eq((int) TEST_REQUEST_ID)); } @Test @@ -666,6 +671,7 @@ public class UdfpsControllerTest extends SysuiTestCase { mFgExecutor.runAllReady(); when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true); mUdfpsController.onAodInterrupt(0, 0, 0f, 0f); + mFgExecutor.runAllReady(); when(mUdfpsView.isIlluminationRequested()).thenReturn(true); // WHEN it times out mFgExecutor.advanceClockToNext(); @@ -734,12 +740,12 @@ public class UdfpsControllerTest extends SysuiTestCase { anyString(), any(), eq("udfps-onStart-click"), - eq(UdfpsController.VIBRATION_ATTRIBUTES)); + eq(UdfpsController.UDFPS_VIBRATION_ATTRIBUTES)); // THEN make sure vibration attributes has so that it always will play the haptic, // even in battery saver mode assertEquals(VibrationAttributes.USAGE_COMMUNICATION_REQUEST, - UdfpsController.VIBRATION_ATTRIBUTES.getUsage()); + UdfpsController.UDFPS_VIBRATION_ATTRIBUTES.getUsage()); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java index cd646c665d03..78fb5b00a21e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java @@ -70,7 +70,7 @@ public class UdfpsDialogMeasureAdapterTest extends SysuiTestCase { assertEquals(970, UdfpsDialogMeasureAdapter.calculateBottomSpacerHeightForPortrait( props, displayHeightPx, textIndicatorHeightPx, buttonBarHeightPx, - dialogBottomMarginPx, navbarHeightPx + dialogBottomMarginPx, navbarHeightPx, 1.0f /* resolutionScale */ )); } @@ -135,6 +135,7 @@ public class UdfpsDialogMeasureAdapterTest extends SysuiTestCase { assertEquals(1205, UdfpsDialogMeasureAdapter.calculateHorizontalSpacerWidthForLandscape( - props, displayWidthPx, dialogMarginPx, navbarHorizontalInsetPx)); + props, displayWidthPx, dialogMarginPx, navbarHorizontalInsetPx, + 1.0f /* resolutionScale */)); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java index 0a1e45c2b28f..9ffc5a57cef6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java @@ -461,7 +461,8 @@ public class DozeSensorsTest extends SysuiTestCase { /* reportsTouchCoordinate*/ false, /* requiresTouchscreen */ false, /* ignoresSetting */ false, - requiresTouchScreen); + requiresTouchScreen, + /* immediatelyReRegister */ true); } public TriggerSensor createDozeSensor( @@ -477,7 +478,8 @@ public class DozeSensorsTest extends SysuiTestCase { /* reportsTouchCoordinate*/ false, /* requiresTouchscreen */ false, /* ignoresSetting */ false, - /* requiresTouchScreen */false); + /* requiresTouchScreen */ false, + /* immediatelyReRegister*/ true); } /** @@ -492,7 +494,8 @@ public class DozeSensorsTest extends SysuiTestCase { /* reportsTouchCoordinate*/ false, /* requiresTouchscreen */ false, /* ignoresSetting */ true, - /* requiresProx */false, + /* requiresProx */ false, + /* immediatelyReRegister */ true, posture); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java index a80aed7a6d18..8a36a68d189a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java @@ -186,6 +186,31 @@ public class KeyguardViewMediatorTest extends SysuiTestCase { } @Test + @TestableLooper.RunWithLooper(setAsMainLooper = true) + public void restoreBouncerWhenSimLockedAndKeyguardIsGoingAway_initiallyNotShowing() { + // When showing and provisioned + mViewMediator.onSystemReady(); + when(mUpdateMonitor.isDeviceProvisioned()).thenReturn(true); + mViewMediator.setShowingLocked(false); + + // and a SIM becomes locked and requires a PIN + mViewMediator.mUpdateCallback.onSimStateChanged( + 1 /* subId */, + 0 /* slotId */, + TelephonyManager.SIM_STATE_PIN_REQUIRED); + + // and the keyguard goes away + mViewMediator.setShowingLocked(false); + when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false); + mViewMediator.mUpdateCallback.onKeyguardVisibilityChanged(false); + + TestableLooper.get(this).processAllMessages(); + + // then make sure it comes back + verify(mStatusBarKeyguardViewManager, atLeast(1)).show(null); + } + + @Test public void testBouncerPrompt_deviceLockedByAdmin() { // GIVEN no trust agents enabled and biometrics aren't enrolled when(mUpdateMonitor.isTrustUsuallyManaged(anyInt())).thenReturn(false); diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt index 9a01464fc869..a8c72ddfd5d7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt @@ -25,9 +25,9 @@ import android.os.PowerManager import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.view.View +import android.view.ViewGroup import android.view.WindowManager import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.test.filters.SmallTest import com.android.internal.logging.testing.UiEventLoggerFake @@ -620,22 +620,22 @@ class MediaTttChipControllerSenderTest : SysuiTestCase() { verify(windowManager).removeView(any()) } - private fun LinearLayout.getAppIconView() = this.requireViewById<ImageView>(R.id.app_icon) + private fun ViewGroup.getAppIconView() = this.requireViewById<ImageView>(R.id.app_icon) - private fun LinearLayout.getChipText(): String = + private fun ViewGroup.getChipText(): String = (this.requireViewById<TextView>(R.id.text)).text as String - private fun LinearLayout.getLoadingIconVisibility(): Int = + private fun ViewGroup.getLoadingIconVisibility(): Int = this.requireViewById<View>(R.id.loading).visibility - private fun LinearLayout.getUndoButton(): View = this.requireViewById(R.id.undo) + private fun ViewGroup.getUndoButton(): View = this.requireViewById(R.id.undo) - private fun LinearLayout.getFailureIcon(): View = this.requireViewById(R.id.failure_icon) + private fun ViewGroup.getFailureIcon(): View = this.requireViewById(R.id.failure_icon) - private fun getChipView(): LinearLayout { + private fun getChipView(): ViewGroup { val viewCaptor = ArgumentCaptor.forClass(View::class.java) verify(windowManager).addView(viewCaptor.capture(), any()) - return viewCaptor.value as LinearLayout + return viewCaptor.value as ViewGroup } /** Helper method providing default parameters to not clutter up the tests. */ diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java index d394d7dcebbe..d67e26f138f2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java @@ -45,6 +45,7 @@ import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -59,6 +60,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.UserInfo; import android.graphics.Color; +import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricSourceType; import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; @@ -69,6 +71,7 @@ import android.os.UserManager; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityManager; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; @@ -106,6 +109,9 @@ import org.mockito.MockitoAnnotations; import java.text.NumberFormat; import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; @SmallTest @RunWith(AndroidTestingRunner.class) @@ -119,7 +125,6 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { private static final int TEST_STRING_RES = R.string.keyguard_indication_trust_unlocked; - private String mKeyguardTryFingerprintMsg; private String mDisclosureWithOrganization; private String mDisclosureGeneric; private String mFinancedDisclosureWithOrganization; @@ -159,6 +164,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { @Mock private KeyguardBypassController mKeyguardBypassController; @Mock + private AccessibilityManager mAccessibilityManager; + @Mock private ScreenLifecycle mScreenLifecycle; @Captor private ArgumentCaptor<DockManager.AlignmentStateListener> mAlignmentListener; @@ -198,7 +205,6 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mContext.addMockSystemService(UserManager.class, mUserManager); mContext.addMockSystemService(Context.TRUST_SERVICE, mock(TrustManager.class)); mContext.addMockSystemService(Context.FINGERPRINT_SERVICE, mock(FingerprintManager.class)); - mKeyguardTryFingerprintMsg = mContext.getString(R.string.keyguard_try_fingerprint); mDisclosureWithOrganization = mContext.getString(R.string.do_disclosure_with_name, ORGANIZATION_NAME); mDisclosureGeneric = mContext.getString(R.string.do_disclosure_generic); @@ -249,7 +255,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mKeyguardStateController, mStatusBarStateController, mKeyguardUpdateMonitor, mDockManager, mBroadcastDispatcher, mDevicePolicyManager, mIBatteryStats, mUserManager, mExecutor, mExecutor, mFalsingManager, mLockPatternUtils, - mScreenLifecycle, mIActivityManager, mKeyguardBypassController); + mScreenLifecycle, mIActivityManager, mKeyguardBypassController, + mAccessibilityManager); mController.init(); mController.setIndicationArea(mIndicationArea); verify(mStatusBarStateController).addCallback(mStatusBarStateListenerCaptor.capture()); @@ -578,6 +585,106 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { } @Test + public void faceErrorTimeout_whenFingerprintEnrolled_doesNotShowMessage() { + createController(); + when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( + 0)).thenReturn(true); + String message = "A message"; + + mController.setVisible(true); + mController.getKeyguardCallback().onBiometricError( + FaceManager.FACE_ERROR_TIMEOUT, message, BiometricSourceType.FACE); + verifyNoMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE); + } + + @Test + public void sendFaceHelpMessages_fingerprintEnrolled() { + createController(); + + // GIVEN fingerprint enrolled + when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( + 0)).thenReturn(true); + + // WHEN help messages received that are allowed to show + final String helpString = "helpString"; + final int[] msgIds = new int[]{ + BiometricFaceConstants.FACE_ACQUIRED_MOUTH_COVERING_DETECTED, + BiometricFaceConstants.FACE_ACQUIRED_DARK_GLASSES_DETECTED + }; + Set<CharSequence> messages = new HashSet<>(); + for (int msgId : msgIds) { + final String message = helpString + msgId; + messages.add(message); + mKeyguardUpdateMonitorCallback.onBiometricHelp( + msgId, message, BiometricSourceType.FACE); + } + + // THEN FACE_ACQUIRED_MOUTH_COVERING_DETECTED and DARK_GLASSES help messages shown + verifyIndicationMessages(INDICATION_TYPE_BIOMETRIC_MESSAGE, + messages); + } + + @Test + public void doNotSendMostFaceHelpMessages_fingerprintEnrolled() { + createController(); + + // GIVEN fingerprint enrolled + when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( + 0)).thenReturn(true); + + // WHEN help messages received that aren't supposed to show + final String helpString = "helpString"; + final int[] msgIds = new int[]{ + BiometricFaceConstants.FACE_ACQUIRED_FACE_OBSCURED, + BiometricFaceConstants.FACE_ACQUIRED_TOO_RIGHT, + BiometricFaceConstants.FACE_ACQUIRED_TOO_LEFT, + BiometricFaceConstants.FACE_ACQUIRED_TOO_HIGH, + BiometricFaceConstants.FACE_ACQUIRED_TOO_LOW, + BiometricFaceConstants.FACE_ACQUIRED_TOO_BRIGHT, + BiometricFaceConstants.FACE_ACQUIRED_TOO_DARK + }; + for (int msgId : msgIds) { + mKeyguardUpdateMonitorCallback.onBiometricHelp( + msgId, helpString + msgId, BiometricSourceType.FACE); + } + + // THEN no messages shown + verifyNoMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE); + } + + @Test + public void sendAllFaceHelpMessages_fingerprintNotEnrolled() { + createController(); + + // GIVEN fingerprint NOT enrolled + when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( + 0)).thenReturn(false); + + // WHEN help messages received + final Set<CharSequence> helpStrings = new HashSet<>(); + final String helpString = "helpString"; + final int[] msgIds = new int[]{ + BiometricFaceConstants.FACE_ACQUIRED_FACE_OBSCURED, + BiometricFaceConstants.FACE_ACQUIRED_DARK_GLASSES_DETECTED, + BiometricFaceConstants.FACE_ACQUIRED_TOO_RIGHT, + BiometricFaceConstants.FACE_ACQUIRED_TOO_LEFT, + BiometricFaceConstants.FACE_ACQUIRED_TOO_HIGH, + BiometricFaceConstants.FACE_ACQUIRED_TOO_LOW, + BiometricFaceConstants.FACE_ACQUIRED_TOO_BRIGHT, + BiometricFaceConstants.FACE_ACQUIRED_TOO_DARK + }; + for (int msgId : msgIds) { + final String numberedHelpString = helpString + msgId; + mKeyguardUpdateMonitorCallback.onBiometricHelp( + msgId, numberedHelpString, BiometricSourceType.FACE); + helpStrings.add(numberedHelpString); + } + + // THEN message shown for each call + verifyIndicationMessages(INDICATION_TYPE_BIOMETRIC_MESSAGE, helpStrings); + } + + @Test public void updateMonitor_listenerUpdatesIndication() { createController(); String restingIndication = "Resting indication"; @@ -846,10 +953,84 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { trustGrantedMsg); } + @Test + public void nonBypassFaceSuccess_touchExplorationEnabled_showsSwipeToOpen() { + // GIVEN non bypass face auth and touch exploration is enabled + when(mKeyguardBypassController.canBypass()).thenReturn(false); + when(mAccessibilityManager.isTouchExplorationEnabled()).thenReturn(true); + when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false); + createController(); + String swipeToOpen = mContext.getString(R.string.keyguard_unlock); + mController.setVisible(true); + + // WHEN face authenticated + mController.getKeyguardCallback().onBiometricAuthenticated(0, + BiometricSourceType.FACE, false); + + // THEN show 'swipe up to open' message + verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, swipeToOpen); + } + + @Test + public void nonBypassFaceSuccess_a11yEnabled_showsSwipeToOpen() { + // GIVEN non bypass face auth and a11y is enabled + when(mKeyguardBypassController.canBypass()).thenReturn(false); + when(mAccessibilityManager.isEnabled()).thenReturn(true); + when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false); + createController(); + String swipeToOpen = mContext.getString(R.string.keyguard_unlock); + mController.setVisible(true); + + // WHEN face auth is successful + mController.getKeyguardCallback().onBiometricAuthenticated(0, + BiometricSourceType.FACE, false); + + // THEN show 'swipe up to open' message + verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, swipeToOpen); + } + + @Test + public void coEx_nonBypassFaceSuccess_showsPressLockIcon() { + // GIVEN udfps is supported, non-bypass face auth, and no a11y enabled + when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(true); + when(mKeyguardBypassController.canBypass()).thenReturn(false); + when(mKeyguardUpdateMonitor.getIsFaceAuthenticated()).thenReturn(true); + when(mAccessibilityManager.isEnabled()).thenReturn(false); + when(mAccessibilityManager.isTouchExplorationEnabled()).thenReturn(false); + when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false); + when(mKeyguardUpdateMonitor.getUserCanSkipBouncer(KeyguardUpdateMonitor.getCurrentUser())) + .thenReturn(true); + createController(); + mController.setVisible(true); + + // WHEN face auth succeeds + mController.getKeyguardCallback().onBiometricAuthenticated(0, + BiometricSourceType.FACE, false); + + // THEN press unlock icon to open message shows + String pressLockIcon = mContext.getString(R.string.keyguard_face_successful_unlock_press); + verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, pressLockIcon); + + assertThat(mTextView.getText()).isNotEqualTo(pressLockIcon); + } + private void sendUpdateDisclosureBroadcast() { mBroadcastReceiver.onReceive(mContext, new Intent()); } + private void verifyIndicationMessages(int type, Set<CharSequence> messages) { + verify(mRotateTextViewController, times(messages.size())).updateIndication(eq(type), + mKeyguardIndicationCaptor.capture(), anyBoolean()); + List<KeyguardIndication> kis = mKeyguardIndicationCaptor.getAllValues(); + + for (KeyguardIndication ki : kis) { + final CharSequence msg = ki.getMessage(); + assertTrue(messages.contains(msg)); // check message is shown + messages.remove(msg); + } + assertThat(messages.size()).isEqualTo(0); // check that all messages accounted for (removed) + } + private void verifyIndicationMessage(int type, String message) { verify(mRotateTextViewController).updateIndication(eq(type), mKeyguardIndicationCaptor.capture(), anyBoolean()); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewTest.kt new file mode 100644 index 000000000000..5f5769572008 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewTest.kt @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2022 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.systemui.statusbar.notification.row + +import android.annotation.ColorInt +import android.graphics.Color +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper.RunWithLooper +import android.view.View +import androidx.test.filters.SmallTest +import com.android.settingslib.Utils +import com.android.systemui.R +import com.android.systemui.SysuiTestCase +import com.android.systemui.statusbar.notification.FakeShadowView +import com.android.systemui.statusbar.notification.NotificationUtils +import com.android.systemui.util.mockito.mock +import com.google.common.truth.Truth.assertThat +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith + +@SmallTest +@RunWith(AndroidTestingRunner::class) +@RunWithLooper +class ActivatableNotificationViewTest : SysuiTestCase() { + private val mContentView: View = mock() + private lateinit var mView: ActivatableNotificationView + + @ColorInt + private var mNormalColor = 0 + + @Before + fun setUp() { + mView = object : ActivatableNotificationView(mContext, null) { + + init { + onFinishInflate() + } + + override fun getContentView(): View { + return mContentView + } + + override fun <T : View> findViewTraversal(id: Int): T? = when (id) { + R.id.backgroundNormal -> mock<NotificationBackgroundView>() + R.id.fake_shadow -> mock<FakeShadowView>() + else -> null + } as T? + } + mNormalColor = + Utils.getColorAttrDefaultColor(mContext, com.android.internal.R.attr.colorSurface) + } + + @Test + fun testBackgroundBehaviors() { + // Color starts with the normal color + mView.updateBackgroundColors() + assertThat(mView.currentBackgroundTint).isEqualTo(mNormalColor) + + // Setting a tint changes the background to that color specifically + mView.setTintColor(Color.BLUE) + assertThat(mView.currentBackgroundTint).isEqualTo(Color.BLUE) + + // Setting an override tint blends with the previous tint + mView.setOverrideTintColor(Color.RED, 0.5f) + assertThat(mView.currentBackgroundTint) + .isEqualTo(NotificationUtils.interpolateColors(Color.BLUE, Color.RED, 0.5f)) + + // Updating the background colors resets tints, as those won't match the latest theme + mView.updateBackgroundColors() + assertThat(mView.currentBackgroundTint).isEqualTo(mNormalColor) + } +}
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java index 6864c65c9af4..e5b6286fcd7c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java @@ -51,6 +51,7 @@ import com.android.systemui.log.SessionTracker; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationShadeWindowController; +import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.policy.KeyguardStateController; import org.junit.Before; @@ -115,6 +116,8 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { private LatencyTracker mLatencyTracker; @Mock private ScreenOffAnimationController mScreenOffAnimationController; + @Mock + private VibratorHelper mVibratorHelper; private BiometricUnlockController mBiometricUnlockController; @Before @@ -128,7 +131,6 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { when(mKeyguardBypassController.onBiometricAuthenticated(any(), anyBoolean())) .thenReturn(true); when(mAuthController.isUdfpsFingerDown()).thenReturn(false); - when(mKeyguardBypassController.canPlaySubtleWindowAnimations()).thenReturn(true); mDependency.injectTestDependency(NotificationMediaManager.class, mMediaManager); mBiometricUnlockController = new BiometricUnlockController(mDozeScrimController, mKeyguardViewMediator, mScrimController, mShadeController, @@ -137,7 +139,7 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { mMetricsLogger, mDumpManager, mPowerManager, mNotificationMediaManager, mWakefulnessLifecycle, mScreenLifecycle, mAuthController, mStatusBarStateController, mKeyguardUnlockAnimationController, - mSessionTracker, mLatencyTracker, mScreenOffAnimationController); + mSessionTracker, mLatencyTracker, mScreenOffAnimationController, mVibratorHelper); mBiometricUnlockController.setKeyguardViewController(mStatusBarKeyguardViewManager); mBiometricUnlockController.setBiometricModeListener(mBiometricModeListener); } @@ -258,11 +260,9 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { mBiometricUnlockController.onBiometricAuthenticated(UserHandle.USER_CURRENT, BiometricSourceType.FACE, true /* isStrongBiometric */); - verify(mShadeController, never()).animateCollapsePanels(anyInt(), anyBoolean(), - anyBoolean(), anyFloat()); verify(mStatusBarKeyguardViewManager).notifyKeyguardAuthenticated(eq(false)); assertThat(mBiometricUnlockController.getMode()) - .isEqualTo(BiometricUnlockController.MODE_UNLOCK_FADING); + .isEqualTo(BiometricUnlockController.MODE_UNLOCK_COLLAPSING); } @Test @@ -277,11 +277,9 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { mBiometricUnlockController.onBiometricAuthenticated(UserHandle.USER_CURRENT, BiometricSourceType.FACE, true /* isStrongBiometric */); - verify(mShadeController, never()).animateCollapsePanels(anyInt(), anyBoolean(), - anyBoolean(), anyFloat()); verify(mStatusBarKeyguardViewManager).notifyKeyguardAuthenticated(eq(false)); assertThat(mBiometricUnlockController.getMode()) - .isEqualTo(BiometricUnlockController.MODE_UNLOCK_FADING); + .isEqualTo(BiometricUnlockController.MODE_UNLOCK_COLLAPSING); } @Test @@ -378,21 +376,6 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { } @Test - public void onBiometricAuthenticated_whenBypassOnBouncer_respectsCanPlaySubtleAnim() { - when(mUpdateMonitor.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(true); - when(mKeyguardBypassController.getBypassEnabled()).thenReturn(true); - when(mStatusBarKeyguardViewManager.bouncerIsOrWillBeShowing()).thenReturn(true); - // the value of isStrongBiometric doesn't matter here since we only care about the returned - // value of isUnlockingWithBiometricAllowed() - mBiometricUnlockController.onBiometricAuthenticated(UserHandle.USER_CURRENT, - BiometricSourceType.FACE, true /* isStrongBiometric */); - - verify(mStatusBarKeyguardViewManager).notifyKeyguardAuthenticated(eq(false)); - assertThat(mBiometricUnlockController.getMode()) - .isEqualTo(BiometricUnlockController.MODE_UNLOCK_FADING); - } - - @Test public void onBiometricAuthenticated_whenFaceAndPulsing_dontDismissKeyguard() { reset(mUpdateMonitor); reset(mStatusBarKeyguardViewManager); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java index 2faff0ced70a..ef681a52f797 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java @@ -129,7 +129,6 @@ import com.android.systemui.statusbar.notification.collection.NotifPipeline; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager; -import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource; import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider; import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider; @@ -159,7 +158,6 @@ import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.MessageRouterImpl; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.volume.VolumeComponent; -import com.android.systemui.wmshell.BubblesManager; import com.android.wm.shell.bubbles.Bubbles; import com.android.wm.shell.startingsurface.StartingSurface; @@ -223,7 +221,6 @@ public class CentralSurfacesImplTest extends SysuiTestCase { @Mock private NotificationShadeWindowView mNotificationShadeWindowView; @Mock private BroadcastDispatcher mBroadcastDispatcher; @Mock private AssistManager mAssistManager; - @Mock private NotifShadeEventSource mNotifShadeEventSource; @Mock private NotificationEntryManager mNotificationEntryManager; @Mock private NotificationGutsManager mNotificationGutsManager; @Mock private NotificationMediaManager mNotificationMediaManager; @@ -240,15 +237,12 @@ public class CentralSurfacesImplTest extends SysuiTestCase { @Mock private StatusBarWindowStateController mStatusBarWindowStateController; @Mock private NotificationViewHierarchyManager mNotificationViewHierarchyManager; @Mock private UserSwitcherController mUserSwitcherController; - @Mock private NetworkController mNetworkController; - @Mock private BubblesManager mBubblesManager; @Mock private Bubbles mBubbles; @Mock private NotificationShadeWindowController mNotificationShadeWindowController; @Mock private NotificationIconAreaController mNotificationIconAreaController; @Mock private NotificationShadeWindowViewController mNotificationShadeWindowViewController; @Mock private DozeParameters mDozeParameters; @Mock private Lazy<LockscreenWallpaper> mLockscreenWallpaperLazy; - @Mock private LockscreenGestureLogger mLockscreenGestureLogger; @Mock private LockscreenWallpaper mLockscreenWallpaper; @Mock private DozeServiceHost mDozeServiceHost; @Mock private ViewMediatorCallback mKeyguardVieMediatorCallback; @@ -403,7 +397,6 @@ public class CentralSurfacesImplTest extends SysuiTestCase { new FalsingManagerFake(), new FalsingCollectorFake(), mBroadcastDispatcher, - mNotifShadeEventSource, mNotificationEntryManager, mNotificationGutsManager, notificationLogger, @@ -418,13 +411,11 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mLockscreenUserManager, mRemoteInputManager, mUserSwitcherController, - mNetworkController, mBatteryController, mColorExtractor, new ScreenLifecycle(mDumpManager), wakefulnessLifecycle, mStatusBarStateController, - Optional.of(mBubblesManager), Optional.of(mBubbles), mVisualStabilityManager, mDeviceProvisionedController, @@ -436,7 +427,6 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mDozeParameters, mScrimController, mLockscreenWallpaperLazy, - mLockscreenGestureLogger, mBiometricUnlockControllerLazy, mDozeServiceHost, mPowerManager, mScreenPinningRequest, @@ -468,7 +458,6 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mLockscreenTransitionController, mFeatureFlags, mKeyguardUnlockAnimationController, - new Handler(TestableLooper.get(this).getLooper()), mMainExecutor, new MessageRouterImpl(mMainExecutor), mWallpaperManager, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java index 9c02216722e2..39021d8732d3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java @@ -399,9 +399,8 @@ public class KeyguardBouncerTest extends SysuiTestCase { mBouncer.hide(false /* destroyView */); verify(mHandler).removeCallbacks(eq(showRunnable.getValue())); } - @Test - public void testShow_delaysIfFaceAuthIsRunning_unlessBypass() { + public void testShow_delaysIfFaceAuthIsRunning_unlessBypassEnabled() { when(mKeyguardStateController.isFaceAuthEnabled()).thenReturn(true); when(mKeyguardBypassController.getBypassEnabled()).thenReturn(true); mBouncer.show(true /* reset */); @@ -410,6 +409,16 @@ public class KeyguardBouncerTest extends SysuiTestCase { } @Test + public void testShow_delaysIfFaceAuthIsRunning_unlessFingerprintEnrolled() { + when(mKeyguardStateController.isFaceAuthEnabled()).thenReturn(true); + when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(0)) + .thenReturn(true); + mBouncer.show(true /* reset */); + + verify(mHandler, never()).postDelayed(any(), anyLong()); + } + + @Test public void testRegisterUpdateMonitorCallback() { verify(mKeyguardUpdateMonitor).registerCallback(any()); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java index 09009c6ee260..32df2d790bd1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java @@ -833,7 +833,7 @@ public class ScrimControllerTest extends SysuiTestCase { } @Test - public void scrimBlanksWhenUnlockingFromPulse() { + public void scrimBlankCallbackWhenUnlockingFromPulse() { boolean[] blanked = {false}; // Simulate unlock with fingerprint mScrimController.transitionTo(ScrimState.PULSING); @@ -846,7 +846,50 @@ public class ScrimControllerTest extends SysuiTestCase { } }); finishAnimationsImmediately(); - Assert.assertTrue("Scrim should blank when unlocking from pulse.", blanked[0]); + Assert.assertTrue("Scrim should send display blanked callback when unlocking " + + "from pulse.", blanked[0]); + } + + @Test + public void blankingNotRequired_leavingAoD() { + // GIVEN display does NOT need blanking + when(mDozeParameters.getDisplayNeedsBlanking()).thenReturn(false); + + mScrimController = new ScrimController(mLightBarController, + mDozeParameters, mAlarmManager, mKeyguardStateController, mDelayedWakeLockBuilder, + new FakeHandler(mLooper.getLooper()), mKeyguardUpdateMonitor, + mDockManager, mConfigurationController, new FakeExecutor(new FakeSystemClock()), + mScreenOffAnimationController, + mPanelExpansionStateManager, + mKeyguardUnlockAnimationController, + mStatusBarKeyguardViewManager); + mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible); + mScrimController.attachViews(mScrimBehind, mNotificationsScrim, mScrimInFront); + mScrimController.setAnimatorListener(mAnimatorListener); + mScrimController.setHasBackdrop(false); + mScrimController.setWallpaperSupportsAmbientMode(false); + mScrimController.transitionTo(ScrimState.KEYGUARD); + finishAnimationsImmediately(); + + // WHEN Simulate unlock with fingerprint + mScrimController.transitionTo(ScrimState.AOD); + finishAnimationsImmediately(); + + // WHEN transitioning to UNLOCKED, onDisplayCallbackBlanked callback called to continue + // the transition but the scrim was not actually blanked + mScrimController.transitionTo(ScrimState.UNLOCKED, + new ScrimController.Callback() { + @Override + public void onDisplayBlanked() { + // Front scrim should not be black nor opaque + Assert.assertTrue("Scrim should NOT be visible during transition." + + " Alpha: " + mScrimInFront.getViewAlpha(), + mScrimInFront.getViewAlpha() == 0f); + Assert.assertSame("Scrim should not be visible during transition.", + mScrimVisibility, TRANSPARENT); + } + }); + finishAnimationsImmediately(); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java index 4f2abf263a9b..2dcb2f4f1203 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java @@ -192,12 +192,12 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { } @Test - public void onPanelExpansionChanged_propagatesToBouncer_evenAfterHidden() { + public void onPanelExpansionChanged_hideBouncer_afterKeyguardHidden() { mStatusBarKeyguardViewManager.hide(0, 0); when(mBouncer.inTransit()).thenReturn(true); mStatusBarKeyguardViewManager.onPanelExpansionChanged(EXPANSION_EVENT); - verify(mBouncer).setExpansion(eq(EXPANSION_EVENT.getFraction())); + verify(mBouncer).setExpansion(eq(KeyguardBouncer.EXPANSION_HIDDEN)); } @Test @@ -239,6 +239,23 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { } @Test + public void onPanelExpansionChanged_neverTranslatesBouncerWhenDismissBouncer() { + // Since KeyguardBouncer.EXPANSION_VISIBLE = 0 panel expansion, if the unlock is dismissing + // the bouncer, there may be an onPanelExpansionChanged(0) call to collapse the panel + // which would mistakenly cause the bouncer to show briefly before its visibility + // is set to hide. Therefore, we don't want to propagate panelExpansionChanged to the + // bouncer if the bouncer is dismissing as a result of a biometric unlock. + when(mBiometricUnlockController.getMode()) + .thenReturn(BiometricUnlockController.MODE_DISMISS_BOUNCER); + mStatusBarKeyguardViewManager.onPanelExpansionChanged( + expansionEvent( + /* fraction= */ KeyguardBouncer.EXPANSION_VISIBLE, + /* expanded= */ true, + /* tracking= */ false)); + verify(mBouncer, never()).setExpansion(anyFloat()); + } + + @Test public void onPanelExpansionChanged_neverTranslatesBouncerWhenLaunchingApp() { when(mCentralSurfaces.isInLaunchTransition()).thenReturn(true); mStatusBarKeyguardViewManager.onPanelExpansionChanged( @@ -381,6 +398,16 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { } @Test + public void testBouncerIsOrWillBeShowing_whenBouncerIsInTransit() { + when(mBouncer.isShowing()).thenReturn(false); + when(mBouncer.inTransit()).thenReturn(true); + + assertTrue( + "Is or will be showing should be true when bouncer is in transit", + mStatusBarKeyguardViewManager.bouncerIsOrWillBeShowing()); + } + + @Test public void testShowAltAuth_unlockingWithBiometricNotAllowed() { // GIVEN alt auth exists, unlocking with biometric isn't allowed mStatusBarKeyguardViewManager.setAlternateAuthInterceptor(mAlternateAuthInterceptor); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java index 6abc687f0ebb..034e06d7e8c4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java @@ -16,6 +16,11 @@ package com.android.systemui.statusbar.phone.fragment; import static android.view.Display.DEFAULT_DISPLAY; +import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.ANIMATING_IN; +import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.ANIMATING_OUT; +import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.IDLE; +import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.RUNNING_CHIP_ANIM; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -25,6 +30,7 @@ import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import android.animation.Animator; import android.app.Fragment; import android.app.StatusBarManager; import android.content.Context; @@ -127,7 +133,8 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { } @Test - public void testDisableSystemInfo() { + public void testDisableSystemInfo_systemAnimationIdle_doesHide() { + when(mAnimationScheduler.getAnimationState()).thenReturn(IDLE); CollapsedStatusBarFragment fragment = resumeAndGetFragment(); fragment.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_SYSTEM_INFO, 0, false); @@ -140,6 +147,98 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { } @Test + public void testSystemStatusAnimation_startedDisabled_finishedWithAnimator_showsSystemInfo() { + // GIVEN the status bar hides the system info via disable flags, while there is no event + CollapsedStatusBarFragment fragment = resumeAndGetFragment(); + when(mAnimationScheduler.getAnimationState()).thenReturn(IDLE); + fragment.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_SYSTEM_INFO, 0, false); + assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility()); + + // WHEN the disable flags are cleared during a system event animation + when(mAnimationScheduler.getAnimationState()).thenReturn(RUNNING_CHIP_ANIM); + fragment.disable(DEFAULT_DISPLAY, 0, 0, false); + + // THEN the view is made visible again, but still low alpha + assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(0, getSystemIconAreaView().getAlpha(), 0.01); + + // WHEN the system event animation finishes + when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_OUT); + Animator anim = fragment.onSystemEventAnimationFinish(false); + anim.start(); + processAllMessages(); + anim.end(); + + // THEN the system info is full alpha + assertEquals(1, getSystemIconAreaView().getAlpha(), 0.01); + } + + @Test + public void testSystemStatusAnimation_systemInfoDisabled_staysInvisible() { + // GIVEN the status bar hides the system info via disable flags, while there is no event + CollapsedStatusBarFragment fragment = resumeAndGetFragment(); + when(mAnimationScheduler.getAnimationState()).thenReturn(IDLE); + fragment.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_SYSTEM_INFO, 0, false); + assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility()); + + // WHEN the system event animation finishes + when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_OUT); + Animator anim = fragment.onSystemEventAnimationFinish(false); + anim.start(); + processAllMessages(); + anim.end(); + + // THEN the system info is at full alpha, but still INVISIBLE (since the disable flag is + // still set) + assertEquals(1, getSystemIconAreaView().getAlpha(), 0.01); + assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility()); + } + + + @Test + public void testSystemStatusAnimation_notDisabled_animatesAlphaZero() { + // GIVEN the status bar is not disabled + CollapsedStatusBarFragment fragment = resumeAndGetFragment(); + when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_IN); + // WHEN the system event animation begins + Animator anim = fragment.onSystemEventAnimationBegin(); + anim.start(); + processAllMessages(); + anim.end(); + + // THEN the system info is visible but alpha 0 + assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(0, getSystemIconAreaView().getAlpha(), 0.01); + } + + @Test + public void testSystemStatusAnimation_notDisabled_animatesBackToAlphaOne() { + // GIVEN the status bar is not disabled + CollapsedStatusBarFragment fragment = resumeAndGetFragment(); + when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_IN); + // WHEN the system event animation begins + Animator anim = fragment.onSystemEventAnimationBegin(); + anim.start(); + processAllMessages(); + anim.end(); + + // THEN the system info is visible but alpha 0 + assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(0, getSystemIconAreaView().getAlpha(), 0.01); + + // WHEN the system event animation finishes + when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_OUT); + anim = fragment.onSystemEventAnimationFinish(false); + anim.start(); + processAllMessages(); + anim.end(); + + // THEN the syste info is full alpha and VISIBLE + assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(1, getSystemIconAreaView().getAlpha(), 0.01); + } + + @Test public void testDisableNotifications() { CollapsedStatusBarFragment fragment = resumeAndGetFragment(); diff --git a/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java b/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java index e78c8d1ddcac..76df8b9f84e8 100644 --- a/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java +++ b/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java @@ -24,10 +24,8 @@ import static com.android.server.backup.UserBackupManagerService.BACKUP_METADATA import static com.android.server.backup.UserBackupManagerService.SHARED_BACKUP_AGENT_PACKAGE; import static com.android.server.backup.internal.BackupHandler.MSG_RESTORE_OPERATION_TIMEOUT; -import android.annotation.NonNull; import android.app.ApplicationThreadConstants; import android.app.IBackupAgent; -import android.app.backup.BackupAgent; import android.app.backup.BackupManager; import android.app.backup.FullBackup; import android.app.backup.IBackupManagerMonitor; @@ -40,12 +38,10 @@ import android.content.pm.Signature; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.provider.Settings; -import android.system.OsConstants; import android.text.TextUtils; import android.util.Slog; import com.android.internal.annotations.GuardedBy; -import com.android.internal.annotations.VisibleForTesting; import com.android.server.LocalServices; import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupRestoreTask; @@ -61,7 +57,6 @@ import com.android.server.backup.utils.FullBackupRestoreObserverUtils; import com.android.server.backup.utils.RestoreUtils; import com.android.server.backup.utils.TarBackupReader; -import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -140,8 +135,6 @@ public class FullRestoreEngine extends RestoreEngine { private boolean mPipesClosed; private final BackupEligibilityRules mBackupEligibilityRules; - private FileMetadata mReadOnlyParent = null; - public FullRestoreEngine( UserBackupManagerService backupManagerService, OperationStorage operationStorage, BackupRestoreTask monitorTask, IFullBackupRestoreObserver observer, @@ -165,22 +158,6 @@ public class FullRestoreEngine extends RestoreEngine { mBackupEligibilityRules = backupEligibilityRules; } - @VisibleForTesting - FullRestoreEngine() { - mIsAdbRestore = false; - mAllowApks = false; - mEphemeralOpToken = 0; - mUserId = 0; - mBackupEligibilityRules = null; - mAgentTimeoutParameters = null; - mBuffer = null; - mBackupManagerService = null; - mOperationStorage = null; - mMonitor = null; - mMonitorTask = null; - mOnlyPackage = null; - } - public IBackupAgent getAgent() { return mAgent; } @@ -420,11 +397,6 @@ public class FullRestoreEngine extends RestoreEngine { okay = false; } - if (shouldSkipReadOnlyDir(info)) { - // b/194894879: We don't support restore of read-only dirs. - okay = false; - } - // At this point we have an agent ready to handle the full // restore data as well as a pipe for sending data to // that agent. Tell the agent to start reading from the @@ -601,45 +573,6 @@ public class FullRestoreEngine extends RestoreEngine { return (info != null); } - boolean shouldSkipReadOnlyDir(FileMetadata info) { - if (isValidParent(mReadOnlyParent, info)) { - // This file has a read-only parent directory, we shouldn't - // restore it. - return true; - } else { - // We're now in a different branch of the file tree, update the parent - // value. - if (isReadOnlyDir(info)) { - // Current directory is read-only. Remember it so that we can skip all - // of its contents. - mReadOnlyParent = info; - Slog.w(TAG, "Skipping restore of " + info.path + " and its contents as " - + "read-only dirs are currently not supported."); - return true; - } else { - mReadOnlyParent = null; - } - } - - return false; - } - - private static boolean isValidParent(FileMetadata parentDir, @NonNull FileMetadata childDir) { - return parentDir != null - && childDir.packageName.equals(parentDir.packageName) - && childDir.domain.equals(parentDir.domain) - && childDir.path.startsWith(getPathWithTrailingSeparator(parentDir.path)); - } - - private static String getPathWithTrailingSeparator(String path) { - return path.endsWith(File.separator) ? path : path + File.separator; - } - - private static boolean isReadOnlyDir(FileMetadata file) { - // Check if owner has 'write' bit in the file's mode value (see 'man -7 inode' for details). - return file.type == BackupAgent.TYPE_DIRECTORY && (file.mode & OsConstants.S_IWUSR) == 0; - } - private void setUpPipes() throws IOException { synchronized (mPipesLock) { mPipes = ParcelFileDescriptor.createPipe(); diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java index c678a67e5bd3..1fab28efb1ac 100644 --- a/services/core/java/com/android/server/Watchdog.java +++ b/services/core/java/com/android/server/Watchdog.java @@ -160,6 +160,8 @@ public class Watchdog implements Dumpable { public static final String[] AIDL_INTERFACE_PREFIXES_OF_INTEREST = new String[] { "android.hardware.biometrics.face.IFace/", "android.hardware.biometrics.fingerprint.IFingerprint/", + "android.hardware.graphics.composer3.IComposer/", + "android.hardware.input.processor.IInputProcessor/", "android.hardware.light.ILights/", "android.hardware.power.IPower/", "android.hardware.power.stats.IPowerStats/", diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 2c2579f9e504..2ec744fd4bb8 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -183,7 +183,7 @@ final class ActivityManagerShellCommand extends ShellCommand { private boolean mAsync; private BroadcastOptions mBroadcastOptions; private boolean mShowSplashScreen; - private boolean mDismissKeyguardIfInsecure; + private boolean mDismissKeyguard; final boolean mDumping; @@ -442,8 +442,8 @@ final class ActivityManagerShellCommand extends ShellCommand { mAsync = true; } else if (opt.equals("--splashscreen-show-icon")) { mShowSplashScreen = true; - } else if (opt.equals("--dismiss-keyguard-if-insecure")) { - mDismissKeyguardIfInsecure = true; + } else if (opt.equals("--dismiss-keyguard")) { + mDismissKeyguard = true; } else { return false; } @@ -588,11 +588,11 @@ final class ActivityManagerShellCommand extends ShellCommand { } options.setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON); } - if (mDismissKeyguardIfInsecure) { + if (mDismissKeyguard) { if (options == null) { options = ActivityOptions.makeBasic(); } - options.setDismissKeyguardIfInsecure(); + options.setDismissKeyguard(); } if (mWaitOption) { result = mInternal.startActivityAndWait(null, SHELL_PACKAGE_NAME, null, intent, diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index f7fbbe4ebead..e9658dbc7b1a 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -1556,14 +1556,22 @@ public class OomAdjuster { boolean foregroundActivities = false; boolean hasVisibleActivities = false; - if (PROCESS_STATE_CUR_TOP == PROCESS_STATE_TOP && app == topApp) { + if (app == topApp && (PROCESS_STATE_CUR_TOP == PROCESS_STATE_TOP + || PROCESS_STATE_CUR_TOP == PROCESS_STATE_IMPORTANT_FOREGROUND)) { // The last app on the list is the foreground app. adj = ProcessList.FOREGROUND_APP_ADJ; - schedGroup = ProcessList.SCHED_GROUP_TOP_APP; - state.setAdjType("top-activity"); + if (PROCESS_STATE_CUR_TOP == PROCESS_STATE_TOP) { + schedGroup = ProcessList.SCHED_GROUP_TOP_APP; + state.setAdjType("top-activity"); + } else { + // Demote the scheduling group to avoid CPU contention if there is another more + // important process which also uses top-app, such as if SystemUI is animating. + schedGroup = ProcessList.SCHED_GROUP_DEFAULT; + state.setAdjType("intermediate-top-activity"); + } foregroundActivities = true; hasVisibleActivities = true; - procState = PROCESS_STATE_CUR_TOP; + procState = PROCESS_STATE_TOP; if (DEBUG_OOM_ADJ_REASON || logUid == appUid) { reportOomAdjMessageLocked(TAG_OOM_ADJ, "Making top: " + app); } diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 02648c4da76f..2c05dd2a2f65 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -346,6 +346,8 @@ public class AudioService extends IAudioService.Stub private static final int MSG_REMOVE_ASSISTANT_SERVICE_UID = 45; private static final int MSG_UPDATE_ACTIVE_ASSISTANT_SERVICE_UID = 46; private static final int MSG_DISPATCH_DEVICE_VOLUME_BEHAVIOR = 47; + private static final int MSG_ROTATION_UPDATE = 48; + private static final int MSG_FOLD_UPDATE = 49; // start of messages handled under wakelock // these messages can only be queued, i.e. sent with queueMsgUnderWakeLock(), @@ -1214,7 +1216,9 @@ public class AudioService extends IAudioService.Stub intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); if (mMonitorRotation) { - RotationHelper.init(mContext, mAudioHandler); + RotationHelper.init(mContext, mAudioHandler, + rotationParam -> onRotationUpdate(rotationParam), + foldParam -> onFoldUpdate(foldParam)); } intentFilter.addAction(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION); @@ -1361,6 +1365,20 @@ public class AudioService extends IAudioService.Stub } //----------------------------------------------------------------- + // rotation/fold updates coming from RotationHelper + void onRotationUpdate(String rotationParameter) { + // use REPLACE as only the last rotation matters + sendMsg(mAudioHandler, MSG_ROTATION_UPDATE, SENDMSG_REPLACE, /*arg1*/ 0, /*arg2*/ 0, + /*obj*/ rotationParameter, /*delay*/ 0); + } + + void onFoldUpdate(String foldParameter) { + // use REPLACE as only the last fold state matters + sendMsg(mAudioHandler, MSG_FOLD_UPDATE, SENDMSG_REPLACE, /*arg1*/ 0, /*arg2*/ 0, + /*obj*/ foldParameter, /*delay*/ 0); + } + + //----------------------------------------------------------------- // monitoring requests for volume range initialization @Override // AudioSystemAdapter.OnVolRangeInitRequestListener public void onVolumeRangeInitRequestFromNative() { @@ -8280,6 +8298,16 @@ public class AudioService extends IAudioService.Stub case MSG_DISPATCH_DEVICE_VOLUME_BEHAVIOR: dispatchDeviceVolumeBehavior((AudioDeviceAttributes) msg.obj, msg.arg1); break; + + case MSG_ROTATION_UPDATE: + // rotation parameter format: "rotation=x" where x is one of 0, 90, 180, 270 + mAudioSystem.setParameters((String) msg.obj); + break; + + case MSG_FOLD_UPDATE: + // fold parameter format: "device_folded=x" where x is one of on, off + mAudioSystem.setParameters((String) msg.obj); + break; } } } diff --git a/services/core/java/com/android/server/audio/RotationHelper.java b/services/core/java/com/android/server/audio/RotationHelper.java index eb8387fe85e5..5cdf58bdd62f 100644 --- a/services/core/java/com/android/server/audio/RotationHelper.java +++ b/services/core/java/com/android/server/audio/RotationHelper.java @@ -21,13 +21,14 @@ import android.hardware.devicestate.DeviceStateManager; import android.hardware.devicestate.DeviceStateManager.FoldStateListener; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManagerGlobal; -import android.media.AudioSystem; import android.os.Handler; import android.os.HandlerExecutor; import android.util.Log; import android.view.Display; import android.view.Surface; +import java.util.function.Consumer; + /** * Class to handle device rotation events for AudioService, and forward device rotation * and folded state to the audio HALs through AudioSystem. @@ -53,6 +54,10 @@ class RotationHelper { private static AudioDisplayListener sDisplayListener; private static FoldStateListener sFoldStateListener; + /** callback to send rotation updates to AudioSystem */ + private static Consumer<String> sRotationUpdateCb; + /** callback to send folded state updates to AudioSystem */ + private static Consumer<String> sFoldUpdateCb; private static final Object sRotationLock = new Object(); private static final Object sFoldStateLock = new Object(); @@ -67,13 +72,16 @@ class RotationHelper { * - sDisplayListener != null * - sContext != null */ - static void init(Context context, Handler handler) { + static void init(Context context, Handler handler, + Consumer<String> rotationUpdateCb, Consumer<String> foldUpdateCb) { if (context == null) { throw new IllegalArgumentException("Invalid null context"); } sContext = context; sHandler = handler; sDisplayListener = new AudioDisplayListener(); + sRotationUpdateCb = rotationUpdateCb; + sFoldUpdateCb = foldUpdateCb; enable(); } @@ -115,21 +123,26 @@ class RotationHelper { if (DEBUG_ROTATION) { Log.i(TAG, "publishing device rotation =" + rotation + " (x90deg)"); } + String rotationParam; switch (rotation) { case Surface.ROTATION_0: - AudioSystem.setParameters("rotation=0"); + rotationParam = "rotation=0"; break; case Surface.ROTATION_90: - AudioSystem.setParameters("rotation=90"); + rotationParam = "rotation=90"; break; case Surface.ROTATION_180: - AudioSystem.setParameters("rotation=180"); + rotationParam = "rotation=180"; break; case Surface.ROTATION_270: - AudioSystem.setParameters("rotation=270"); + rotationParam = "rotation=270"; break; default: Log.e(TAG, "Unknown device rotation"); + rotationParam = null; + } + if (rotationParam != null) { + sRotationUpdateCb.accept(rotationParam); } } @@ -140,11 +153,13 @@ class RotationHelper { synchronized (sFoldStateLock) { if (sDeviceFold != newFolded) { sDeviceFold = newFolded; + String foldParam; if (newFolded) { - AudioSystem.setParameters("device_folded=on"); + foldParam = "device_folded=on"; } else { - AudioSystem.setParameters("device_folded=off"); + foldParam = "device_folded=off"; } + sFoldUpdateCb.accept(foldParam); } } } diff --git a/services/core/java/com/android/server/biometrics/BiometricService.java b/services/core/java/com/android/server/biometrics/BiometricService.java index 0d9b75481ea9..4767969bd3ed 100644 --- a/services/core/java/com/android/server/biometrics/BiometricService.java +++ b/services/core/java/com/android/server/biometrics/BiometricService.java @@ -958,7 +958,7 @@ public class BiometricService extends SystemService { public boolean isCoexFaceNonBypassHapticsDisabled(Context context) { return Settings.Secure.getInt(context.getContentResolver(), - CoexCoordinator.FACE_HAPTIC_DISABLE, 1) != 0; + CoexCoordinator.FACE_HAPTIC_DISABLE, 0) != 0; } public Supplier<Long> getRequestGenerator() { diff --git a/services/core/java/com/android/server/biometrics/OWNERS b/services/core/java/com/android/server/biometrics/OWNERS index f05f40353e30..cd281e06f40d 100644 --- a/services/core/java/com/android/server/biometrics/OWNERS +++ b/services/core/java/com/android/server/biometrics/OWNERS @@ -1,9 +1,14 @@ set noparent -kchyn@google.com -jaggies@google.com -curtislb@google.com +graciecheng@google.com ilyamaty@google.com -joshmccloskey@google.com +jaggies@google.com jbolinger@google.com -graciecheng@google.com +jeffpu@google.com +joshmccloskey@google.com + +firewall@google.com +jasonsfchang@google.com +lbill@google.com +mingjuwu@google.com + diff --git a/services/core/java/com/android/server/biometrics/sensors/CoexCoordinator.java b/services/core/java/com/android/server/biometrics/sensors/CoexCoordinator.java index 5aa9b79c074c..c8a90e7a564b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/CoexCoordinator.java +++ b/services/core/java/com/android/server/biometrics/sensors/CoexCoordinator.java @@ -92,7 +92,7 @@ public class CoexCoordinator { void sendHapticFeedback(); } - private static CoexCoordinator sInstance; + private static final CoexCoordinator sInstance = new CoexCoordinator(); @VisibleForTesting public static class SuccessfulAuth { @@ -147,14 +147,9 @@ public class CoexCoordinator { } } - /** - * @return a singleton instance. - */ + /** The singleton instance. */ @NonNull public static CoexCoordinator getInstance() { - if (sInstance == null) { - sInstance = new CoexCoordinator(); - } return sInstance; } @@ -339,18 +334,8 @@ public class CoexCoordinator { auth.mCallback.sendHapticFeedback(); auth.mCallback.sendAuthenticationResult(true /* addAuthTokenIfStrong */); auth.mCallback.handleLifecycleAfterAuth(); - } else if (isFaceScanning()) { - // UDFPS rejected but face is still scanning - Slog.d(TAG, "UDFPS rejected in multi-sensor auth, face: " + face); - callback.handleLifecycleAfterAuth(); - - // TODO(b/193089985): Enforce/ensure that face auth finishes (whether - // accept/reject) within X amount of time. Otherwise users will be stuck - // waiting with their finger down for a long time. } else { - // Face not scanning, and was not found in the queue. Most likely, face - // auth was too long ago. - Slog.d(TAG, "UDFPS rejected in multi-sensor auth, face not scanning"); + Slog.d(TAG, "UDFPS rejected in multi-sensor auth"); callback.sendHapticFeedback(); callback.handleLifecycleAfterAuth(); } diff --git a/services/core/java/com/android/server/biometrics/sensors/UserAwareBiometricScheduler.java b/services/core/java/com/android/server/biometrics/sensors/UserAwareBiometricScheduler.java index a0999771a1be..ae75b7dcc101 100644 --- a/services/core/java/com/android/server/biometrics/sensors/UserAwareBiometricScheduler.java +++ b/services/core/java/com/android/server/biometrics/sensors/UserAwareBiometricScheduler.java @@ -67,6 +67,14 @@ public class UserAwareBiometricScheduler extends BiometricScheduler { public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) { mHandler.post(() -> { Slog.d(getTag(), "[Client finished] " + clientMonitor + ", success: " + success); + + // Set mStopUserClient to null when StopUserClient fails. Otherwise it's possible + // for that the queue will wait indefinitely until the field is cleared. + if (clientMonitor instanceof StopUserClient<?> && !success) { + Slog.w(getTag(), + "StopUserClient failed(), is the HAL stuck? Clearing mStopUserClient"); + mStopUserClient = null; + } if (mCurrentOperation != null && mCurrentOperation.isFor(mOwner)) { mCurrentOperation = null; } else { @@ -166,4 +174,9 @@ public class UserAwareBiometricScheduler extends BiometricScheduler { mStopUserClient.onUserStopped(); mStopUserClient = null; } + + @VisibleForTesting + @Nullable public StopUserClient<?> getStopUserClient() { + return mStopUserClient; + } } diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java index 9ae6750dbcbf..d0c58fd0545f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java @@ -99,7 +99,10 @@ class FaceAuthenticationClient extends AuthenticationClient<AidlSession> super(context, lazyDaemon, token, listener, targetUserId, operationId, restricted, owner, cookie, requireConfirmation, sensorId, logger, biometricContext, isStrongBiometric, null /* taskStackListener */, lockoutCache, - allowBackgroundAuthentication, true /* shouldVibrate */, + allowBackgroundAuthentication, + context.getResources().getBoolean( + com.android.internal.R.bool.system_server_plays_face_haptics) + /* shouldVibrate */, isKeyguardBypassEnabled); setRequestId(requestId); mUsageStats = usageStats; diff --git a/services/core/java/com/android/server/input/GestureMonitorSpyWindow.java b/services/core/java/com/android/server/input/GestureMonitorSpyWindow.java index e222c644da9e..d238dae634ad 100644 --- a/services/core/java/com/android/server/input/GestureMonitorSpyWindow.java +++ b/services/core/java/com/android/server/input/GestureMonitorSpyWindow.java @@ -27,8 +27,6 @@ import android.view.InputWindowHandle; import android.view.SurfaceControl; import android.view.WindowManager; -import com.android.server.policy.WindowManagerPolicy; - /** * An internal implementation of an {@link InputMonitor} that uses a spy window. * @@ -69,9 +67,7 @@ class GestureMonitorSpyWindow { final SurfaceControl.Transaction t = new SurfaceControl.Transaction(); t.setInputWindowInfo(mInputSurface, mWindowHandle); - // Gesture monitor should be above handwriting event surface, hence setting it to - // WindowManagerPolicy.INPUT_DISPLAY_OVERLAY_LAYER + 1 - t.setLayer(mInputSurface, WindowManagerPolicy.INPUT_DISPLAY_OVERLAY_LAYER + 1); + t.setLayer(mInputSurface, Integer.MAX_VALUE); t.setPosition(mInputSurface, 0, 0); t.setCrop(mInputSurface, null /* crop to parent surface */); t.show(mInputSurface); diff --git a/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java b/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java index 5438faa8793e..8180e66166d9 100644 --- a/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java +++ b/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java @@ -27,8 +27,6 @@ import android.view.InputWindowHandle; import android.view.SurfaceControl; import android.view.WindowManager; -import com.android.server.policy.WindowManagerPolicy; - final class HandwritingEventReceiverSurface { public static final String TAG = HandwritingEventReceiverSurface.class.getSimpleName(); @@ -38,8 +36,7 @@ final class HandwritingEventReceiverSurface { // is above gesture monitors, then edge-back and swipe-up gestures won't work when this surface // is intercepting. // TODO(b/217538817): Specify the ordering in WM by usage. - private static final int HANDWRITING_SURFACE_LAYER = - WindowManagerPolicy.INPUT_DISPLAY_OVERLAY_LAYER; + private static final int HANDWRITING_SURFACE_LAYER = Integer.MAX_VALUE - 1; private final InputWindowHandle mWindowHandle; private final InputChannel mClientChannel; diff --git a/services/core/java/com/android/server/location/gnss/GnssConfiguration.java b/services/core/java/com/android/server/location/gnss/GnssConfiguration.java index 12f8776a8e18..1435016fc55a 100644 --- a/services/core/java/com/android/server/location/gnss/GnssConfiguration.java +++ b/services/core/java/com/android/server/location/gnss/GnssConfiguration.java @@ -21,6 +21,7 @@ import android.os.PersistableBundle; import android.os.SystemProperties; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; @@ -73,6 +74,8 @@ public class GnssConfiguration { static final String CONFIG_NFW_PROXY_APPS = "NFW_PROXY_APPS"; private static final String CONFIG_ENABLE_PSDS_PERIODIC_DOWNLOAD = "ENABLE_PSDS_PERIODIC_DOWNLOAD"; + private static final String CONFIG_ENABLE_ACTIVE_SIM_EMERGENCY_SUPL = + "ENABLE_ACTIVE_SIM_EMERGENCY_SUPL"; static final String CONFIG_LONGTERM_PSDS_SERVER_1 = "LONGTERM_PSDS_SERVER_1"; static final String CONFIG_LONGTERM_PSDS_SERVER_2 = "LONGTERM_PSDS_SERVER_2"; static final String CONFIG_LONGTERM_PSDS_SERVER_3 = "LONGTERM_PSDS_SERVER_3"; @@ -207,6 +210,14 @@ public class GnssConfiguration { } /** + * Returns true if during an emergency call, the GnssConfiguration of the activeSubId will be + * injected for the emergency SUPL flow; Returns false otherwise. Default false if not set. + */ + boolean isActiveSimEmergencySuplEnabled() { + return getBooleanConfig(CONFIG_ENABLE_ACTIVE_SIM_EMERGENCY_SUPL, false); + } + + /** * Returns true if a long-term PSDS server is configured. */ boolean isLongTermPsdsServerConfigured() { @@ -232,16 +243,31 @@ public class GnssConfiguration { /** * Loads the GNSS properties from carrier config file followed by the properties from - * gps debug config file. + * gps debug config file, and injects the GNSS properties into the HAL. */ void reloadGpsProperties() { - if (DEBUG) Log.d(TAG, "Reset GPS properties, previous size = " + mProperties.size()); - loadPropertiesFromCarrierConfig(); + reloadGpsProperties(/* inEmergency= */ false, /* activeSubId= */ -1); + } - String lpp_prof = SystemProperties.get(LPP_PROFILE); - if (!TextUtils.isEmpty(lpp_prof)) { - // override default value of this if lpp_prof is not empty - mProperties.setProperty(CONFIG_LPP_PROFILE, lpp_prof); + /** + * Loads the GNSS properties from carrier config file followed by the properties from + * gps debug config file, and injects the GNSS properties into the HAL. + */ + void reloadGpsProperties(boolean inEmergency, int activeSubId) { + if (DEBUG) { + Log.d(TAG, + "Reset GPS properties, previous size = " + mProperties.size() + ", inEmergency:" + + inEmergency + ", activeSubId=" + activeSubId); + } + loadPropertiesFromCarrierConfig(inEmergency, activeSubId); + + if (isSimAbsent(mContext)) { + // Use the default SIM's LPP profile when SIM is absent. + String lpp_prof = SystemProperties.get(LPP_PROFILE); + if (!TextUtils.isEmpty(lpp_prof)) { + // override default value of this if lpp_prof is not empty + mProperties.setProperty(CONFIG_LPP_PROFILE, lpp_prof); + } } /* @@ -322,16 +348,19 @@ public class GnssConfiguration { /** * Loads GNSS properties from carrier config file. */ - void loadPropertiesFromCarrierConfig() { + void loadPropertiesFromCarrierConfig(boolean inEmergency, int activeSubId) { CarrierConfigManager configManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configManager == null) { return; } - int ddSubId = SubscriptionManager.getDefaultDataSubscriptionId(); - PersistableBundle configs = SubscriptionManager.isValidSubscriptionId(ddSubId) - ? configManager.getConfigForSubId(ddSubId) : configManager.getConfig(); + int subId = SubscriptionManager.getDefaultDataSubscriptionId(); + if (inEmergency && activeSubId >= 0) { + subId = activeSubId; + } + PersistableBundle configs = SubscriptionManager.isValidSubscriptionId(subId) + ? configManager.getConfigForSubId(subId) : configManager.getConfig(); if (configs == null) { if (DEBUG) Log.d(TAG, "SIM not ready, use default carrier config."); configs = CarrierConfigManager.getDefaultConfig(); @@ -422,6 +451,12 @@ public class GnssConfiguration { return gnssConfiguartionIfaceVersion.mMajor < 2; } + private static boolean isSimAbsent(Context context) { + TelephonyManager phone = (TelephonyManager) context.getSystemService( + Context.TELEPHONY_SERVICE); + return phone.getSimState() == TelephonyManager.SIM_STATE_ABSENT; + } + private static native HalInterfaceVersion native_get_gnss_configuration_version(); private static native boolean native_set_supl_version(int version); diff --git a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java index f5c2bbc8d5a2..a6a3db11b729 100644 --- a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java @@ -126,6 +126,7 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; /** * A GNSS implementation of LocationProvider used by LocationManager. @@ -359,8 +360,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } } if (isKeepLppProfile) { - // load current properties for the carrier - mGnssConfiguration.loadPropertiesFromCarrierConfig(); + // load current properties for the carrier of ddSubId + mGnssConfiguration.loadPropertiesFromCarrierConfig(/* inEmergency= */ false, + /* activeSubId= */ -1); String lpp_profile = mGnssConfiguration.getLppProfile(); // set the persist property LPP_PROFILE for the value if (lpp_profile != null) { @@ -431,13 +433,38 @@ public class GnssLocationProvider extends AbstractLocationProvider implements // this approach is just fine because events are posted to our handler anyway mGnssConfiguration = mGnssNative.getConfiguration(); // Create a GPS net-initiated handler (also needed by handleInitialize) + GpsNetInitiatedHandler.EmergencyCallCallback emergencyCallCallback = + new GpsNetInitiatedHandler.EmergencyCallCallback() { + + @Override + public void onEmergencyCallStart(int subId) { + if (!mGnssConfiguration.isActiveSimEmergencySuplEnabled()) { + return; + } + mHandler.post(() -> mGnssConfiguration.reloadGpsProperties( + mNIHandler.getInEmergency(), subId)); + } + + @Override + public void onEmergencyCallEnd() { + if (!mGnssConfiguration.isActiveSimEmergencySuplEnabled()) { + return; + } + mHandler.postDelayed(() -> mGnssConfiguration.reloadGpsProperties( + /* inEmergency= */ false, + SubscriptionManager.getDefaultDataSubscriptionId()), + TimeUnit.SECONDS.toMillis(mGnssConfiguration.getEsExtensionSec())); + } + }; mNIHandler = new GpsNetInitiatedHandler(context, mNetInitiatedListener, + emergencyCallCallback, mSuplEsEnabled); // Trigger PSDS data download when the network comes up after booting. mPendingDownloadPsdsTypes.add(GnssPsdsDownloader.LONG_TERM_PSDS_SERVER_INDEX); mNetworkConnectivityHandler = new GnssNetworkConnectivityHandler(context, - GnssLocationProvider.this::onNetworkAvailable, mHandler.getLooper(), mNIHandler); + GnssLocationProvider.this::onNetworkAvailable, + mHandler.getLooper(), mNIHandler); mNtpTimeHelper = new NtpTimeHelper(mContext, mHandler.getLooper(), this); mGnssSatelliteBlocklistHelper = @@ -1694,9 +1721,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements int type = AGPS_SETID_TYPE_NONE; String setId = null; - int ddSubId = SubscriptionManager.getDefaultDataSubscriptionId(); - if (SubscriptionManager.isValidSubscriptionId(ddSubId)) { - phone = phone.createForSubscriptionId(ddSubId); + int subId = SubscriptionManager.getDefaultDataSubscriptionId(); + if (mNIHandler.getInEmergency() && mNetworkConnectivityHandler.getActiveSubId() >= 0) { + subId = mNetworkConnectivityHandler.getActiveSubId(); + } + if (SubscriptionManager.isValidSubscriptionId(subId)) { + phone = phone.createForSubscriptionId(subId); } if ((flags & AGPS_REQUEST_SETID_IMSI) == AGPS_REQUEST_SETID_IMSI) { setId = phone.getSubscriberId(); diff --git a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java index aba7572ee1a0..6f890cda5964 100644 --- a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java +++ b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java @@ -190,7 +190,7 @@ class GnssNetworkConnectivityHandler { mContext = context; mGnssNetworkListener = gnssNetworkListener; - SubscriptionManager subManager = mContext.getSystemService(SubscriptionManager.class); + SubscriptionManager subManager = mContext.getSystemService(SubscriptionManager.class); if (subManager != null) { subManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener); } @@ -311,6 +311,13 @@ class GnssNetworkConnectivityHandler { } /** + * Returns the active Sub ID for emergency SUPL connection. + */ + int getActiveSubId() { + return mActiveSubId; + } + + /** * Called from native code to update AGPS connection status, or to request or release a SUPL * connection. * diff --git a/services/core/java/com/android/server/media/BluetoothRouteProvider.java b/services/core/java/com/android/server/media/BluetoothRouteProvider.java index d0651ed176cf..d4d3a39c724e 100644 --- a/services/core/java/com/android/server/media/BluetoothRouteProvider.java +++ b/services/core/java/com/android/server/media/BluetoothRouteProvider.java @@ -348,18 +348,14 @@ class BluetoothRouteProvider { private void addActiveRoute(BluetoothRouteInfo btRoute) { if (btRoute == null) { - if (DEBUG) { - Log.d(TAG, " btRoute is null"); - } + Slog.w(TAG, "addActiveRoute: btRoute is null"); return; } if (DEBUG) { Log.d(TAG, "Adding active route: " + btRoute.route); } if (mActiveRoutes.contains(btRoute)) { - if (DEBUG) { - Log.d(TAG, " btRoute is already added."); - } + Slog.w(TAG, "addActiveRoute: btRoute is already added."); return; } setRouteConnectionState(btRoute, STATE_CONNECTED); @@ -392,6 +388,12 @@ class BluetoothRouteProvider { private void addActiveDevices(BluetoothDevice device) { // Let the given device be the first active device BluetoothRouteInfo activeBtRoute = mBluetoothRoutes.get(device.getAddress()); + // This could happen if ACTION_ACTIVE_DEVICE_CHANGED is sent before + // ACTION_CONNECTION_STATE_CHANGED is sent. + if (activeBtRoute == null) { + activeBtRoute = createBluetoothRoute(device); + mBluetoothRoutes.put(device.getAddress(), activeBtRoute); + } addActiveRoute(activeBtRoute); // A bluetooth route with the same route ID should be added. diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 3dfbff1639d1..4c48a3690211 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -7030,7 +7030,6 @@ public class NotificationManagerService extends SystemService { @GuardedBy("mNotificationLock") void snoozeLocked(NotificationRecord r) { - final List<NotificationRecord> recordsToSnooze = new ArrayList<>(); if (r.getSbn().isGroup()) { final List<NotificationRecord> groupNotifications = findCurrentAndSnoozedGroupNotificationsLocked( @@ -7039,8 +7038,8 @@ public class NotificationManagerService extends SystemService { if (r.getNotification().isGroupSummary()) { // snooze all children for (int i = 0; i < groupNotifications.size(); i++) { - if (!mKey.equals(groupNotifications.get(i).getKey())) { - recordsToSnooze.add(groupNotifications.get(i)); + if (mKey != groupNotifications.get(i).getKey()) { + snoozeNotificationLocked(groupNotifications.get(i)); } } } else { @@ -7050,8 +7049,8 @@ public class NotificationManagerService extends SystemService { if (groupNotifications.size() == 2) { // snooze summary and the one child for (int i = 0; i < groupNotifications.size(); i++) { - if (!mKey.equals(groupNotifications.get(i).getKey())) { - recordsToSnooze.add(groupNotifications.get(i)); + if (mKey != groupNotifications.get(i).getKey()) { + snoozeNotificationLocked(groupNotifications.get(i)); } } } @@ -7059,15 +7058,7 @@ public class NotificationManagerService extends SystemService { } } // snooze the notification - recordsToSnooze.add(r); - - if (mSnoozeHelper.canSnooze(recordsToSnooze.size())) { - for (int i = 0; i < recordsToSnooze.size(); i++) { - snoozeNotificationLocked(recordsToSnooze.get(i)); - } - } else { - Log.w(TAG, "Cannot snooze " + r.getKey() + ": too many snoozed notifications"); - } + snoozeNotificationLocked(r); } diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java index 15d7c1e7a210..7f265df3f416 100644 --- a/services/core/java/com/android/server/notification/SnoozeHelper.java +++ b/services/core/java/com/android/server/notification/SnoozeHelper.java @@ -62,8 +62,6 @@ import java.util.Set; public class SnoozeHelper { public static final int XML_SNOOZED_NOTIFICATION_VERSION = 1; - static final int CONCURRENT_SNOOZE_LIMIT = 500; - protected static final String XML_TAG_NAME = "snoozed-notifications"; private static final String XML_SNOOZED_NOTIFICATION = "notification"; @@ -137,15 +135,6 @@ public class SnoozeHelper { } } - protected boolean canSnooze(int numberToSnooze) { - synchronized (mLock) { - if ((mPackages.size() + numberToSnooze) > CONCURRENT_SNOOZE_LIMIT) { - return false; - } - } - return true; - } - @NonNull protected Long getSnoozeTimeForUnpostedNotification(int userId, String pkg, String key) { Long time = null; diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java index 89178139ffec..7ca09ab5154f 100644 --- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java +++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java @@ -156,10 +156,6 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { int FINISH_LAYOUT_REDO_ANIM = 0x0008; /** Layer for the screen off animation */ int COLOR_FADE_LAYER = 0x40000001; - /** Layer for Input overlays for capturing inputs for gesture detection, etc. */ - int INPUT_DISPLAY_OVERLAY_LAYER = 0x7f000000; - /** Layer for Screen Decoration: The top most visible layer just below input overlay layers */ - int SCREEN_DECOR_DISPLAY_OVERLAY_LAYER = INPUT_DISPLAY_OVERLAY_LAYER - 1; /** * Register shortcuts for window manager to dispatch. diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 83687e9ebccd..026e5d286630 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -874,7 +874,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A boolean mEnteringAnimation; boolean mOverrideTaskTransition; - boolean mDismissKeyguardIfInsecure; + boolean mDismissKeyguard; boolean mAppStopped; // A hint to override the window specified rotation animation, or -1 to use the window specified @@ -1993,7 +1993,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } mOverrideTaskTransition = options.getOverrideTaskTransition(); - mDismissKeyguardIfInsecure = options.getDismissKeyguardIfInsecure(); + mDismissKeyguard = options.getDismissKeyguard(); } ColorDisplayService.ColorDisplayServiceInternal cds = LocalServices.getService( diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index aa154292fe7e..f830f6fe0926 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -64,8 +64,8 @@ import static android.provider.Settings.Global.HIDE_ERROR_DIALOGS; import static android.provider.Settings.System.FONT_SCALE; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; -import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT; import static android.view.WindowManager.TRANSIT_WAKE; +import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_FOCUS; @@ -400,6 +400,26 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { /** The time at which the previous process was last visible. */ private long mPreviousProcessVisibleTime; + /** It is set from keyguard-going-away to set-keyguard-shown. */ + static final int DEMOTE_TOP_REASON_DURING_UNLOCKING = 1; + /** It is set if legacy recents animation is running. */ + static final int DEMOTE_TOP_REASON_ANIMATING_RECENTS = 1 << 1; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + DEMOTE_TOP_REASON_DURING_UNLOCKING, + DEMOTE_TOP_REASON_ANIMATING_RECENTS, + }) + @interface DemoteTopReason {} + + /** + * If non-zero, getTopProcessState() will + * return {@link ActivityManager#PROCESS_STATE_IMPORTANT_FOREGROUND} to avoid top app from + * preempting CPU while another process is running an important animation. + */ + @DemoteTopReason + volatile int mDemoteTopAppReasons; + /** List of intents that were used to start the most recent tasks. */ private RecentTasks mRecentTasks; /** State of external calls telling us if the device is awake or asleep. */ @@ -2830,12 +2850,24 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { keyguardShowing); mH.sendMessage(msg); } + // Always reset the state regardless of keyguard-showing change, because that means the + // unlock is either completed or canceled. + if ((mDemoteTopAppReasons & DEMOTE_TOP_REASON_DURING_UNLOCKING) != 0) { + mDemoteTopAppReasons &= ~DEMOTE_TOP_REASON_DURING_UNLOCKING; + // The scheduling group of top process was demoted by unlocking, so recompute + // to restore its real top priority if possible. + if (mTopApp != null) { + mTopApp.scheduleUpdateOomAdj(); + } + } try { + Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "setLockScreenShown"); mRootWindowContainer.forAllDisplays(displayContent -> { mKeyguardController.setKeyguardShown(displayContent.getDisplayId(), keyguardShowing, aodShowing); }); } finally { + Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); Binder.restoreCallingIdentity(ident); } } @@ -2862,6 +2894,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { // animation of system UI. Even if AOD is not enabled, it should be no harm. final WindowProcessController proc; synchronized (mGlobalLockWithoutBoost) { + mDemoteTopAppReasons &= ~DEMOTE_TOP_REASON_DURING_UNLOCKING; final WindowState notificationShade = mRootWindowContainer.getDefaultDisplay() .getDisplayPolicy().getNotificationShade(); proc = notificationShade != null @@ -3399,8 +3432,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { try { synchronized (mGlobalLock) { // Keyguard asked us to clear the home task snapshot before going away, so do that. - if ((flags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_LAUNCHER_CLEAR_SNAPSHOT) != 0) { + if ((flags & KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT) != 0) { mActivityClientController.invalidateHomeTaskSnapshot(null /* token */); + } else if (mKeyguardShown) { + // Only set if it is not unlocking to launcher which may also animate. + mDemoteTopAppReasons |= DEMOTE_TOP_REASON_DURING_UNLOCKING; } mRootWindowContainer.forAllDisplays(displayContent -> { @@ -3968,6 +4004,9 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { mTaskOrganizerController.dump(pw, " "); mVisibleActivityProcessTracker.dump(pw, " "); mActiveUids.dump(pw, " "); + if (mDemoteTopAppReasons != 0) { + pw.println(" mDemoteTopAppReasons=" + mDemoteTopAppReasons); + } } if (!printedAnything) { @@ -5595,12 +5634,17 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @HotPath(caller = HotPath.OOM_ADJUSTMENT) @Override public int getTopProcessState() { + final int topState = mTopProcessState; + if (mDemoteTopAppReasons != 0 && topState == ActivityManager.PROCESS_STATE_TOP) { + // There may be a more important UI/animation than the top app. + return ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND; + } if (mRetainPowerModeAndTopProcessState) { // There is a launching app while device may be sleeping, force the top state so // the launching process can have top-app scheduling group. return ActivityManager.PROCESS_STATE_TOP; } - return mTopProcessState; + return topState; } @HotPath(caller = HotPath.PROCESS_CHANGE) diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index a03dce364209..79aef00750a1 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -3233,10 +3233,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } public void setRotationAnimation(ScreenRotationAnimation screenRotationAnimation) { - if (mScreenRotationAnimation != null) { - mScreenRotationAnimation.kill(); - } + final ScreenRotationAnimation prev = mScreenRotationAnimation; mScreenRotationAnimation = screenRotationAnimation; + if (prev != null) { + prev.kill(); + } // Hide the windows which are not significant in rotation animation. So that the windows // don't need to block the unfreeze time. @@ -5395,7 +5396,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp SurfaceControl[] findRoundedCornerOverlays() { List<SurfaceControl> roundedCornerOverlays = new ArrayList<>(); for (WindowToken token : mTokenMap.values()) { - if (token.mRoundedCornerOverlay) { + if (token.mRoundedCornerOverlay && token.isVisible()) { roundedCornerOverlays.add(token.mSurfaceControl); } } diff --git a/services/core/java/com/android/server/wm/InputManagerCallback.java b/services/core/java/com/android/server/wm/InputManagerCallback.java index b7ddbd070460..33cdd2e98113 100644 --- a/services/core/java/com/android/server/wm/InputManagerCallback.java +++ b/services/core/java/com/android/server/wm/InputManagerCallback.java @@ -265,7 +265,7 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal .setContainerLayer() .setName(name) .setCallsite("createSurfaceForGestureMonitor") - .setParent(dc.getOverlayLayer()) + .setParent(dc.getSurfaceControl()) .build(); } } diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index f36dbfa2316e..a4c05eecdb07 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -41,6 +41,7 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM; import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.ActivityTaskSupervisor.PRESERVE_WINDOWS; import static com.android.server.wm.KeyguardControllerProto.AOD_SHOWING; +import static com.android.server.wm.KeyguardControllerProto.KEYGUARD_GOING_AWAY; import static com.android.server.wm.KeyguardControllerProto.KEYGUARD_PER_DISPLAY; import static com.android.server.wm.KeyguardControllerProto.KEYGUARD_SHOWING; @@ -589,13 +590,12 @@ class KeyguardController { mTopTurnScreenOnActivity = top; } - final boolean isKeyguardSecure = controller.mWindowManager.isKeyguardSecure( - controller.mService.getCurrentUserId()); - if (top.mDismissKeyguardIfInsecure && mKeyguardShowing && !isKeyguardSecure) { + if (top.mDismissKeyguard && mKeyguardShowing) { mKeyguardGoingAway = true; } else if (top.canShowWhenLocked()) { mTopOccludesActivity = top; } + top.mDismissKeyguard = false; // Only the top activity may control occluded, as we can't occlude the Keyguard // if the top app doesn't want to occlude it. @@ -673,6 +673,7 @@ class KeyguardController { proto.write(KeyguardPerDisplayProto.KEYGUARD_SHOWING, mKeyguardShowing); proto.write(KeyguardPerDisplayProto.AOD_SHOWING, mAodShowing); proto.write(KeyguardPerDisplayProto.KEYGUARD_OCCLUDED, mOccluded); + proto.write(KeyguardPerDisplayProto.KEYGUARD_GOING_AWAY, mKeyguardGoingAway); proto.end(token); } } @@ -693,6 +694,7 @@ class KeyguardController { final long token = proto.start(fieldId); proto.write(AOD_SHOWING, default_state.mAodShowing); proto.write(KEYGUARD_SHOWING, default_state.mKeyguardShowing); + proto.write(KEYGUARD_GOING_AWAY, default_state.mKeyguardGoingAway); writeDisplayStatesToProto(proto, KEYGUARD_PER_DISPLAY); proto.end(token); } diff --git a/services/core/java/com/android/server/wm/RecentsAnimation.java b/services/core/java/com/android/server/wm/RecentsAnimation.java index eca201dc2bda..f840171b29b0 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimation.java +++ b/services/core/java/com/android/server/wm/RecentsAnimation.java @@ -203,9 +203,7 @@ class RecentsAnimation implements RecentsAnimationCallbacks, OnRootTaskOrderChan final LaunchingState launchingState = mTaskSupervisor.getActivityMetricsLogger().notifyActivityLaunching(mTargetIntent); - if (mCaller != null) { - mCaller.setRunningRecentsAnimation(true); - } + setProcessAnimating(true); mService.deferWindowLayout(); try { @@ -409,15 +407,33 @@ class RecentsAnimation implements RecentsAnimationCallbacks, OnRootTaskOrderChan if (mWindowManager.mRoot.isLayoutNeeded()) { mWindowManager.mRoot.performSurfacePlacement(); } - if (mCaller != null) { - mCaller.setRunningRecentsAnimation(false); - } + setProcessAnimating(false); Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); } }); } } + /** Gives the owner of recents animation higher priority. */ + private void setProcessAnimating(boolean animating) { + if (mCaller == null) return; + // Apply the top-app scheduling group to who runs the animation. + mCaller.setRunningRecentsAnimation(animating); + int demoteReasons = mService.mDemoteTopAppReasons; + if (animating) { + demoteReasons |= ActivityTaskManagerService.DEMOTE_TOP_REASON_ANIMATING_RECENTS; + } else { + demoteReasons &= ~ActivityTaskManagerService.DEMOTE_TOP_REASON_ANIMATING_RECENTS; + } + mService.mDemoteTopAppReasons = demoteReasons; + // Make the demotion of the real top app take effect. No need to restore top app state for + // finishing recents because addToStopping -> scheduleIdle -> activityIdleInternal -> + // trimApplications will have a full update. + if (animating && mService.mTopApp != null) { + mService.mTopApp.scheduleUpdateOomAdj(); + } + } + @Override public void onAnimationFinished(@RecentsAnimationController.ReorderMode int reorderMode, boolean sendUserLeaveHint) { diff --git a/services/core/java/com/android/server/wm/SafeActivityOptions.java b/services/core/java/com/android/server/wm/SafeActivityOptions.java index 2d4aef682d62..fd05f19f54c5 100644 --- a/services/core/java/com/android/server/wm/SafeActivityOptions.java +++ b/services/core/java/com/android/server/wm/SafeActivityOptions.java @@ -16,6 +16,7 @@ package com.android.server.wm; +import static android.Manifest.permission.CONTROL_KEYGUARD; import static android.Manifest.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS; import static android.Manifest.permission.START_TASKS_FROM_RECENTS; import static android.Manifest.permission.STATUS_BAR_SERVICE; @@ -297,6 +298,20 @@ public class SafeActivityOptions { } } + // Check if the caller is allowed to dismiss keyguard. + final boolean dismissKeyguard = options.getDismissKeyguard(); + if (aInfo != null && dismissKeyguard) { + final int controlKeyguardPerm = ActivityTaskManagerService.checkPermission( + CONTROL_KEYGUARD, callingPid, callingUid); + if (controlKeyguardPerm != PERMISSION_GRANTED) { + final String msg = "Permission Denial: starting " + getIntentString(intent) + + " from " + callerApp + " (pid=" + callingPid + + ", uid=" + callingUid + ") with dismissKeyguard=true"; + Slog.w(TAG, msg); + throw new SecurityException(msg); + } + } + // Check permission for remote animations final RemoteAnimationAdapter adapter = options.getRemoteAnimationAdapter(); if (adapter != null && supervisor.mService.checkPermission( diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java index 2ef19321d958..f31a3cc9bcb3 100644 --- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java @@ -40,9 +40,11 @@ import android.graphics.Matrix; import android.graphics.Point; import android.graphics.Rect; import android.hardware.HardwareBuffer; +import android.os.IBinder; import android.os.Trace; import android.util.Slog; import android.util.proto.ProtoOutputStream; +import android.view.DisplayAddress; import android.view.DisplayInfo; import android.view.Surface; import android.view.Surface.OutOfResourcesException; @@ -102,6 +104,7 @@ class ScreenRotationAnimation { private SurfaceControl mEnterBlackFrameLayer; /** This layer contains the actual screenshot that is to be faded out. */ private SurfaceControl mScreenshotLayer; + private SurfaceControl[] mRoundedCornerOverlay; /** * Only used for screen rotation and not custom animations. Layered behind all other layers * to avoid showing any "empty" spots @@ -151,6 +154,11 @@ class ScreenRotationAnimation { final boolean flipped = delta == Surface.ROTATION_90 || delta == Surface.ROTATION_270; mOriginalWidth = flipped ? height : width; mOriginalHeight = flipped ? width : height; + final int logicalWidth = displayInfo.logicalWidth; + final int logicalHeight = displayInfo.logicalHeight; + final boolean isSizeChanged = + logicalWidth > mOriginalWidth == logicalHeight > mOriginalHeight + && (logicalWidth != mOriginalWidth || logicalHeight != mOriginalHeight); mSurfaceRotationAnimationController = new SurfaceRotationAnimationController(); // Check whether the current screen contains any secure content. @@ -159,18 +167,43 @@ class ScreenRotationAnimation { final SurfaceControl.Transaction t = mService.mTransactionFactory.get(); try { - SurfaceControl.LayerCaptureArgs args = - new SurfaceControl.LayerCaptureArgs.Builder(displayContent.getSurfaceControl()) - .setCaptureSecureLayers(true) - .setAllowProtected(true) - .setSourceCrop(new Rect(0, 0, width, height)) - // Exclude rounded corner overlay from screenshot buffer. Rounded - // corner overlay windows are un-rotated during rotation animation - // for a seamless transition. - .setExcludeLayers(displayContent.findRoundedCornerOverlays()) - .build(); - SurfaceControl.ScreenshotHardwareBuffer screenshotBuffer = - SurfaceControl.captureLayers(args); + final SurfaceControl.ScreenshotHardwareBuffer screenshotBuffer; + if (isSizeChanged) { + final DisplayAddress address = displayInfo.address; + if (!(address instanceof DisplayAddress.Physical)) { + Slog.e(TAG, "Display does not have a physical address: " + displayId); + return; + } + final DisplayAddress.Physical physicalAddress = + (DisplayAddress.Physical) address; + final IBinder displayToken = SurfaceControl.getPhysicalDisplayToken( + physicalAddress.getPhysicalDisplayId()); + if (displayToken == null) { + Slog.e(TAG, "Display token is null."); + return; + } + // Temporarily not skip screenshot for the rounded corner overlays and screenshot + // the whole display to include the rounded corner overlays. + setSkipScreenshotForRoundedCornerOverlays(false, t); + mRoundedCornerOverlay = displayContent.findRoundedCornerOverlays(); + final SurfaceControl.DisplayCaptureArgs captureArgs = + new SurfaceControl.DisplayCaptureArgs.Builder(displayToken) + .setSourceCrop(new Rect(0, 0, width, height)) + .setAllowProtected(true) + .setCaptureSecureLayers(true) + .build(); + screenshotBuffer = SurfaceControl.captureDisplay(captureArgs); + } else { + SurfaceControl.LayerCaptureArgs captureArgs = + new SurfaceControl.LayerCaptureArgs.Builder( + displayContent.getSurfaceControl()) + .setCaptureSecureLayers(true) + .setAllowProtected(true) + .setSourceCrop(new Rect(0, 0, width, height)) + .build(); + screenshotBuffer = SurfaceControl.captureLayers(captureArgs); + } + if (screenshotBuffer == null) { Slog.w(TAG, "Unable to take screenshot of display " + displayId); return; @@ -232,6 +265,14 @@ class ScreenRotationAnimation { t.show(mScreenshotLayer); t.show(mBackColorSurface); + if (mRoundedCornerOverlay != null) { + for (SurfaceControl sc : mRoundedCornerOverlay) { + if (sc.isValid()) { + t.hide(sc); + } + } + } + } catch (OutOfResourcesException e) { Slog.w(TAG, "Unable to allocate freeze surface", e); } @@ -240,10 +281,7 @@ class ScreenRotationAnimation { // the new logical display size. Currently pending transaction and RWC#mDisplayTransaction // are merged to global transaction, so it can be synced with display change when calling // DisplayManagerInternal#performTraversal(transaction). - final int logicalWidth = displayInfo.logicalWidth; - final int logicalHeight = displayInfo.logicalHeight; - if (logicalWidth > mOriginalWidth == logicalHeight > mOriginalHeight - && (logicalWidth != mOriginalWidth || logicalHeight != mOriginalHeight)) { + if (mScreenshotLayer != null && isSizeChanged) { displayContent.getPendingTransaction().setGeometry(mScreenshotLayer, new Rect(0, 0, mOriginalWidth, mOriginalHeight), new Rect(0, 0, logicalWidth, logicalHeight), Surface.ROTATION_0); @@ -264,6 +302,21 @@ class ScreenRotationAnimation { t.apply(); } + void setSkipScreenshotForRoundedCornerOverlays( + boolean skipScreenshot, SurfaceControl.Transaction t) { + mDisplayContent.forAllWindows(w -> { + if (!w.mToken.mRoundedCornerOverlay || !w.isVisible() || !w.mWinAnimator.hasSurface()) { + return; + } + t.setSkipScreenshot(w.mWinAnimator.mSurfaceController.mSurfaceControl, skipScreenshot); + }, false); + if (!skipScreenshot) { + // Use sync apply to apply the change immediately, so that the next + // SC.captureDisplay can capture the screen decor layers. + t.apply(true /* sync */); + } + } + public void dumpDebug(ProtoOutputStream proto, long fieldId) { final long token = proto.start(fieldId); proto.write(STARTED, mStarted); @@ -472,6 +525,19 @@ class ScreenRotationAnimation { } mBackColorSurface = null; } + + if (mRoundedCornerOverlay != null) { + if (mDisplayContent.getRotationAnimation() == null + || mDisplayContent.getRotationAnimation() == this) { + setSkipScreenshotForRoundedCornerOverlays(true, t); + for (SurfaceControl sc : mRoundedCornerOverlay) { + if (sc.isValid()) { + t.show(sc); + } + } + } + mRoundedCornerOverlay = null; + } t.apply(); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 52af39ee64b3..902218621cd0 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -8215,7 +8215,7 @@ public class WindowManagerService extends IWindowManager.Stub .setContainerLayer() .setName("IME Handwriting Surface") .setCallsite("getHandwritingSurfaceForDisplay") - .setParent(dc.getOverlayLayer()) + .setParent(dc.getSurfaceControl()) .build(); } } diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index 40417a4857d3..215bcb0cd8e2 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -1126,6 +1126,13 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio mAtm.mH.sendMessage(m); } + /** Refreshes oom adjustment and process state of this process. */ + void scheduleUpdateOomAdj() { + mAtm.mH.sendMessage(PooledLambda.obtainMessage(WindowProcessListener::updateProcessInfo, + mListener, false /* updateServiceConnectionActivities */, + false /* activityChange */, true /* updateOomAdj */)); + } + /** Makes the process have top state before oom-adj is computed from a posted message. */ void addToPendingTop() { mAtm.mAmInternal.addPendingTopUid(mUid, mPid, mThread); diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java index 18f60b1a9a20..d2e56faa0914 100644 --- a/services/core/java/com/android/server/wm/WindowToken.java +++ b/services/core/java/com/android/server/wm/WindowToken.java @@ -368,7 +368,7 @@ class WindowToken extends WindowContainer<WindowState> { super.assignRelativeLayer(t, mDisplayContent.getDefaultTaskDisplayArea().getSplitScreenDividerAnchor(), 1); } else if (mRoundedCornerOverlay) { - super.assignLayer(t, WindowManagerPolicy.SCREEN_DECOR_DISPLAY_OVERLAY_LAYER); + super.assignLayer(t, WindowManagerPolicy.COLOR_FADE_LAYER + 1); } else { super.assignLayer(t, layer); } @@ -378,7 +378,7 @@ class WindowToken extends WindowContainer<WindowState> { SurfaceControl.Builder makeSurface() { final SurfaceControl.Builder builder = super.makeSurface(); if (mRoundedCornerOverlay) { - builder.setParent(getDisplayContent().getOverlayLayer()); + builder.setParent(null); } return builder; } diff --git a/services/tests/servicestests/src/com/android/server/backup/restore/FullRestoreEngineTest.java b/services/tests/servicestests/src/com/android/server/backup/restore/FullRestoreEngineTest.java deleted file mode 100644 index 049c745fc128..000000000000 --- a/services/tests/servicestests/src/com/android/server/backup/restore/FullRestoreEngineTest.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.backup.restore; - -import static com.google.common.truth.Truth.assertWithMessage; - -import android.app.backup.BackupAgent; -import android.platform.test.annotations.Presubmit; -import android.system.OsConstants; - -import androidx.test.runner.AndroidJUnit4; - -import com.android.server.backup.FileMetadata; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -@Presubmit -@RunWith(AndroidJUnit4.class) -public class FullRestoreEngineTest { - private static final String DEFAULT_PACKAGE_NAME = "package"; - private static final String DEFAULT_DOMAIN_NAME = "domain"; - private static final String NEW_PACKAGE_NAME = "new_package"; - private static final String NEW_DOMAIN_NAME = "new_domain"; - - private FullRestoreEngine mRestoreEngine; - - @Before - public void setUp() { - mRestoreEngine = new FullRestoreEngine(); - } - - @Test - public void shouldSkipReadOnlyDir_skipsAllReadonlyDirsAndTheirChildren() { - // Create the file tree. - TestFile[] testFiles = new TestFile[] { - TestFile.dir("root"), - TestFile.file("root/auth_token"), - TestFile.dir("root/media"), - TestFile.file("root/media/picture1.png"), - TestFile.file("root/push_token.txt"), - TestFile.dir("root/read-only-dir-1").markReadOnly().expectSkipped(), - TestFile.dir("root/read-only-dir-1/writable-subdir").expectSkipped(), - TestFile.file("root/read-only-dir-1/writable-subdir/writable-file").expectSkipped(), - TestFile.dir("root/read-only-dir-1/writable-subdir/read-only-subdir-2") - .markReadOnly().expectSkipped(), - TestFile.file("root/read-only-dir-1/writable-file").expectSkipped(), - TestFile.file("root/random-stuff.txt"), - TestFile.dir("root/database"), - TestFile.file("root/database/users.db"), - TestFile.dir("root/read-only-dir-2").markReadOnly().expectSkipped(), - TestFile.file("root/read-only-dir-2/writable-file-1").expectSkipped(), - TestFile.file("root/read-only-dir-2/writable-file-2").expectSkipped(), - }; - - assertCorrectItemsAreSkipped(testFiles); - } - - @Test - public void shouldSkipReadOnlyDir_onlySkipsChildrenUnderTheSamePackage() { - TestFile[] testFiles = new TestFile[]{ - TestFile.dir("read-only-dir").markReadOnly().expectSkipped(), - TestFile.file("read-only-dir/file").expectSkipped(), - TestFile.file("read-only-dir/file-from-different-package") - .setPackage(NEW_PACKAGE_NAME), - }; - - assertCorrectItemsAreSkipped(testFiles); - } - - @Test - public void shouldSkipReadOnlyDir_onlySkipsChildrenUnderTheSameDomain() { - TestFile[] testFiles = new TestFile[]{ - TestFile.dir("read-only-dir").markReadOnly().expectSkipped(), - TestFile.file("read-only-dir/file").expectSkipped(), - TestFile.file("read-only-dir/file-from-different-domain") - .setDomain(NEW_DOMAIN_NAME), - }; - - assertCorrectItemsAreSkipped(testFiles); - } - - private void assertCorrectItemsAreSkipped(TestFile[] testFiles) { - // Verify all directories marked with .expectSkipped are skipped. - for (TestFile testFile : testFiles) { - boolean actualExcluded = mRestoreEngine.shouldSkipReadOnlyDir(testFile.mMetadata); - boolean expectedExcluded = testFile.mShouldSkip; - assertWithMessage(testFile.mMetadata.path).that(actualExcluded).isEqualTo( - expectedExcluded); - } - } - - private static class TestFile { - private final FileMetadata mMetadata; - private boolean mShouldSkip; - - static TestFile dir(String path) { - return new TestFile(path, BackupAgent.TYPE_DIRECTORY); - } - - static TestFile file(String path) { - return new TestFile(path, BackupAgent.TYPE_FILE); - } - - TestFile markReadOnly() { - mMetadata.mode = 0; - return this; - } - - TestFile expectSkipped() { - mShouldSkip = true; - return this; - } - - TestFile setPackage(String packageName) { - mMetadata.packageName = packageName; - return this; - } - - TestFile setDomain(String domain) { - mMetadata.domain = domain; - return this; - } - - private TestFile(String path, int type) { - FileMetadata metadata = new FileMetadata(); - metadata.path = path; - metadata.type = type; - metadata.packageName = DEFAULT_PACKAGE_NAME; - metadata.domain = DEFAULT_DOMAIN_NAME; - metadata.mode = OsConstants.S_IWUSR; // Mark as writable. - mMetadata = metadata; - } - } -} diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/CoexCoordinatorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/CoexCoordinatorTest.java index f40b31a0bc0d..abf992b6c637 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/CoexCoordinatorTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/CoexCoordinatorTest.java @@ -415,7 +415,7 @@ public class CoexCoordinatorTest { // Auth was attempted when(mUdfpsClient.getState()) .thenReturn(AuthenticationClient.STATE_STARTED_PAUSED_ATTEMPTED); - verify(mCallback, never()).sendHapticFeedback(); + verify(mCallback).sendHapticFeedback(); verify(mCallback).handleLifecycleAfterAuth(); // Then face rejected. Note that scheduler leaves UDFPS in the CoexCoordinator since @@ -425,7 +425,7 @@ public class CoexCoordinatorTest { LockoutTracker.LOCKOUT_NONE, faceCallback); verify(faceCallback).sendHapticFeedback(); verify(faceCallback).sendAuthenticationResult(eq(false) /* addAuthTokenIfStrong */); - verify(mCallback, never()).sendHapticFeedback(); + verify(mCallback).sendHapticFeedback(); } @Test diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java index 8391914a0bb6..0df3028805d2 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/UserAwareBiometricSchedulerTest.java @@ -80,6 +80,11 @@ public class UserAwareBiometricSchedulerTest { @Mock private BiometricContext mBiometricContext; + private boolean mShouldFailStopUser = false; + private final StopUserClientShouldFail mStopUserClientShouldFail = + () -> { + return mShouldFailStopUser; + }; private final TestUserStartedCallback mUserStartedCallback = new TestUserStartedCallback(); private final TestUserStoppedCallback mUserStoppedCallback = new TestUserStoppedCallback(); private int mCurrentUserId = UserHandle.USER_NULL; @@ -88,6 +93,7 @@ public class UserAwareBiometricSchedulerTest { @Before public void setUp() { + mShouldFailStopUser = false; mHandler = new Handler(TestableLooper.get(this).getLooper()); mScheduler = new UserAwareBiometricScheduler(TAG, mHandler, @@ -101,7 +107,7 @@ public class UserAwareBiometricSchedulerTest { public StopUserClient<?> getStopUserClient(int userId) { return new TestStopUserClient(mContext, Object::new, mToken, userId, TEST_SENSOR_ID, mBiometricLogger, mBiometricContext, - mUserStoppedCallback); + mUserStoppedCallback, mStopUserClientShouldFail); } @NonNull @@ -240,6 +246,36 @@ public class UserAwareBiometricSchedulerTest { assertThat(mUserStoppedCallback.mNumInvocations).isEqualTo(1); } + @Test + public void testStartUser_failsClearsStopUserClient() { + // When a stop user client fails, check that mStopUserClient + // is set to null to prevent the scheduler from getting stuck. + BaseClientMonitor nextClient = mock(BaseClientMonitor.class); + when(nextClient.getTargetUserId()).thenReturn(10); + + mScheduler.scheduleClientMonitor(nextClient); + + waitForIdle(); + verify(nextClient).start(any()); + + // finish first operation + mScheduler.getInternalCallback().onClientFinished(nextClient, true /* success */); + waitForIdle(); + + // schedule second operation but swap out the current operation + // before it runs so that it's not current when it's completion callback runs + nextClient = mock(BaseClientMonitor.class); + when(nextClient.getTargetUserId()).thenReturn(11); + mUserStartedCallback.mAfterStart = () -> mScheduler.mCurrentOperation = null; + mShouldFailStopUser = true; + mScheduler.scheduleClientMonitor(nextClient); + + waitForIdle(); + assertThat(mUserStartedCallback.mStartedUsers).containsExactly(10, 11).inOrder(); + assertThat(mUserStoppedCallback.mNumInvocations).isEqualTo(0); + assertThat(mScheduler.getStopUserClient()).isEqualTo(null); + } + private void waitForIdle() { TestableLooper.get(this).processAllMessages(); } @@ -268,13 +304,19 @@ public class UserAwareBiometricSchedulerTest { } } - private static class TestStopUserClient extends StopUserClient<Object> { + private interface StopUserClientShouldFail { + boolean shouldFail(); + } + + private class TestStopUserClient extends StopUserClient<Object> { + private StopUserClientShouldFail mShouldFailClient; public TestStopUserClient(@NonNull Context context, @NonNull Supplier<Object> lazyDaemon, @Nullable IBinder token, int userId, int sensorId, @NonNull BiometricLogger logger, @NonNull BiometricContext biometricContext, - @NonNull UserStoppedCallback callback) { + @NonNull UserStoppedCallback callback, StopUserClientShouldFail shouldFail) { super(context, lazyDaemon, token, userId, sensorId, logger, biometricContext, callback); + mShouldFailClient = shouldFail; } @Override @@ -285,7 +327,14 @@ public class UserAwareBiometricSchedulerTest { @Override public void start(@NonNull ClientMonitorCallback callback) { super.start(callback); - onUserStopped(); + if (mShouldFailClient.shouldFail()) { + getCallback().onClientFinished(this, false /* success */); + // When the above fails, it means that the HAL has died, in this case we + // need to ensure the UserSwitchCallback correctly returns the NULL user handle. + mCurrentUserId = UserHandle.USER_NULL; + } else { + onUserStopped(); + } } @Override diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index b1b323b734bd..22721a1bcc92 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -3380,80 +3380,19 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testSnoozeRunnable_tooManySnoozed_singleNotification() { - final NotificationRecord notification = generateNotificationRecord( - mTestNotificationChannel, 1, null, true); - mService.addNotification(notification); - - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); - when(mSnoozeHelper.canSnooze(1)).thenReturn(false); - - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); - snoozeNotificationRunnable.run(); - - verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); - assertThat(mService.getNotificationRecordCount()).isEqualTo(1); - } - - @Test - public void testSnoozeRunnable_tooManySnoozed_singleGroupChildNotification() { - final NotificationRecord notification = generateNotificationRecord( - mTestNotificationChannel, 1, "group", true); - final NotificationRecord notificationChild = generateNotificationRecord( - mTestNotificationChannel, 1, "group", false); - mService.addNotification(notification); - mService.addNotification(notificationChild); - - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); - when(mSnoozeHelper.canSnooze(2)).thenReturn(false); - - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = - mService.new SnoozeNotificationRunnable( - notificationChild.getKey(), 100, null); - snoozeNotificationRunnable.run(); - - verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); - assertThat(mService.getNotificationRecordCount()).isEqualTo(2); - } - - @Test - public void testSnoozeRunnable_tooManySnoozed_summaryNotification() { - final NotificationRecord notification = generateNotificationRecord( - mTestNotificationChannel, 1, "group", true); - final NotificationRecord notificationChild = generateNotificationRecord( - mTestNotificationChannel, 12, "group", false); - final NotificationRecord notificationChild2 = generateNotificationRecord( - mTestNotificationChannel, 13, "group", false); - mService.addNotification(notification); - mService.addNotification(notificationChild); - mService.addNotification(notificationChild2); - - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); - when(mSnoozeHelper.canSnooze(3)).thenReturn(false); - - NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = - mService.new SnoozeNotificationRunnable( - notification.getKey(), 100, null); - snoozeNotificationRunnable.run(); - - verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong()); - assertThat(mService.getNotificationRecordCount()).isEqualTo(3); - } - - @Test - public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() { + public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() throws Exception { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, null, true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -3461,17 +3400,19 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() { + public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() throws Exception { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, "group", true); mService.addNotification(notification); when(mSnoozeHelper.getNotification(any())).thenReturn(notification); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( notification.getKey(), 100, null); snoozeNotificationRunnable.run(); + NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = + mService.new SnoozeNotificationRunnable( + notification.getKey(), 100, null); snoozeNotificationRunnable.run(); // snooze twice @@ -3489,7 +3430,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { when(mSnoozeHelper.getNotification(any())).thenReturn(notification); when(mSnoozeHelper.getNotifications( anyString(), anyString(), anyInt())).thenReturn(new ArrayList<>()); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3499,8 +3439,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .thenReturn(new ArrayList<>(Arrays.asList(notification, notification2))); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 = mService.new SnoozeNotificationRunnable( - notification2.getKey(), 100, null); - snoozeNotificationRunnable2.run(); + notification.getKey(), 100, null); + snoozeNotificationRunnable.run(); // snooze twice verify(mSnoozeHelper, times(4)).snooze(any(NotificationRecord.class), anyLong()); @@ -3514,7 +3454,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(grouped); mService.addNotification(nonGrouped); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3544,7 +3483,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3566,7 +3504,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.addNotification(parent); mService.addNotification(child); mService.addNotification(child2); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3592,7 +3529,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mTestNotificationChannel, 2, "group", false); mService.addNotification(parent); mService.addNotification(child); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( @@ -3620,7 +3556,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { final NotificationRecord child = generateNotificationRecord( mTestNotificationChannel, 2, "group", false); mService.addNotification(child); - when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true); NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable = mService.new SnoozeNotificationRunnable( diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index 8bead5774548..2ae2ef7162a5 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -15,7 +15,6 @@ */ package com.android.server.notification; -import static com.android.server.notification.SnoozeHelper.CONCURRENT_SNOOZE_LIMIT; import static com.android.server.notification.SnoozeHelper.EXTRA_KEY; import static junit.framework.Assert.assertEquals; @@ -282,22 +281,6 @@ public class SnoozeHelperTest extends UiServiceTestCase { } @Test - public void testSnoozeLimit() { - for (int i = 0; i < CONCURRENT_SNOOZE_LIMIT; i++ ) { - NotificationRecord r = getNotificationRecord("pkg", i, i+"", UserHandle.SYSTEM); - - assertTrue("cannot snooze record " + i, mSnoozeHelper.canSnooze(1)); - - if (i % 2 == 0) { - mSnoozeHelper.snooze(r, null); - } else { - mSnoozeHelper.snooze(r, 9000); - } - } - assertFalse(mSnoozeHelper.canSnooze(1)); - } - - @Test public void testCancelByApp() throws Exception { NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java index 1b19a28a9790..28fb0154a3b8 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java @@ -37,13 +37,13 @@ import static com.android.server.wm.WindowContainer.POSITION_TOP; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; -import android.app.IApplicationThread; import android.content.ComponentName; import android.content.Intent; import android.content.pm.ActivityInfo; @@ -91,9 +91,15 @@ public class RecentsAnimationTest extends WindowTestsBase { TaskDisplayArea taskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea(); Task recentsStack = taskDisplayArea.createRootTask(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_RECENTS, true /* onTop */); + final WindowProcessController wpc = mSystemServicesTestRule.addProcess( + mRecentsComponent.getPackageName(), mRecentsComponent.getPackageName(), + // Use real pid/uid of the test so the corresponding process can be mapped by + // Binder.getCallingPid/Uid. + android.os.Process.myPid(), android.os.Process.myUid()); ActivityRecord recentActivity = new ActivityBuilder(mAtm) .setComponent(mRecentsComponent) .setTask(recentsStack) + .setUseProcess(wpc) .build(); ActivityRecord topActivity = new ActivityBuilder(mAtm).setCreateTask(true).build(); topActivity.getRootTask().moveToFront("testRecentsActivityVisiblility"); @@ -106,11 +112,14 @@ public class RecentsAnimationTest extends WindowTestsBase { mRecentsComponent, true /* getRecentsAnimation */); // The launch-behind state should make the recents activity visible. assertTrue(recentActivity.mVisibleRequested); + assertEquals(ActivityTaskManagerService.DEMOTE_TOP_REASON_ANIMATING_RECENTS, + mAtm.mDemoteTopAppReasons); // Simulate the animation is cancelled without changing the stack order. recentsAnimation.onAnimationFinished(REORDER_KEEP_IN_PLACE, false /* sendUserLeaveHint */); // The non-top recents activity should be invisible by the restored launch-behind state. assertFalse(recentActivity.mVisibleRequested); + assertEquals(0, mAtm.mDemoteTopAppReasons); } @Test @@ -138,11 +147,8 @@ public class RecentsAnimationTest extends WindowTestsBase { anyInt() /* startFlags */, any() /* profilerInfo */); // Assume its process is alive because the caller should be the recents service. - WindowProcessController wpc = new WindowProcessController(mAtm, aInfo.applicationInfo, - aInfo.processName, aInfo.applicationInfo.uid, 0 /* userId */, - mock(Object.class) /* owner */, mock(WindowProcessListener.class)); - wpc.setThread(mock(IApplicationThread.class)); - doReturn(wpc).when(mAtm).getProcessController(eq(wpc.mName), eq(wpc.mUid)); + mSystemServicesTestRule.addProcess(aInfo.packageName, aInfo.processName, 12345 /* pid */, + aInfo.applicationInfo.uid); Intent recentsIntent = new Intent().setComponent(mRecentsComponent); // Null animation indicates to preload. diff --git a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java index dc9a62554fdb..258625c751a3 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java +++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java @@ -43,12 +43,14 @@ import static org.mockito.Mockito.withSettings; import android.app.ActivityManagerInternal; import android.app.AppOpsManager; +import android.app.IApplicationThread; import android.app.usage.UsageStatsManagerInternal; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.IntentFilter; +import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManagerInternal; import android.database.ContentObserver; @@ -454,8 +456,32 @@ public class SystemServicesTestRule implements TestRule { .spiedInstance(sWakeLock).stubOnly()); } - void setSurfaceFactory(Supplier<Surface> factory) { - mSurfaceFactory = factory; + WindowProcessController addProcess(String pkgName, String procName, int pid, int uid) { + return addProcess(mAtmService, pkgName, procName, pid, uid); + } + + static WindowProcessController addProcess(ActivityTaskManagerService atmService, String pkgName, + String procName, int pid, int uid) { + final ApplicationInfo info = new ApplicationInfo(); + info.uid = uid; + info.packageName = pkgName; + return addProcess(atmService, info, procName, pid); + } + + static WindowProcessController addProcess(ActivityTaskManagerService atmService, + ApplicationInfo info, String procName, int pid) { + final WindowProcessListener mockListener = mock(WindowProcessListener.class, + withSettings().stubOnly()); + final int uid = info.uid; + final WindowProcessController proc = new WindowProcessController(atmService, + info, procName, uid, UserHandle.getUserId(uid), mockListener, mockListener); + proc.setThread(mock(IApplicationThread.class, withSettings().stubOnly())); + atmService.mProcessNames.put(procName, uid, proc); + if (pid > 0) { + proc.setPid(pid); + atmService.mProcessMap.put(pid, proc); + } + return proc; } void cleanupWindowManagerHandlers() { diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java index 20fbda428381..7347f8825ff7 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java @@ -64,7 +64,6 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityOptions; -import android.app.IApplicationThread; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -915,13 +914,15 @@ class WindowTestsBase extends SystemServiceTestsBase { */ protected static class ActivityBuilder { static final int DEFAULT_FAKE_UID = 12345; + static final String DEFAULT_PROCESS_NAME = "procName"; + static int sProcNameSeq; private final ActivityTaskManagerService mService; private ComponentName mComponent; private String mTargetActivity; private Task mTask; - private String mProcessName = "name"; + private String mProcessName = DEFAULT_PROCESS_NAME; private String mAffinity; private int mUid = DEFAULT_FAKE_UID; private boolean mCreateTask = false; @@ -1109,6 +1110,9 @@ class WindowTestsBase extends SystemServiceTestsBase { aInfo.applicationInfo.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT; aInfo.applicationInfo.packageName = mComponent.getPackageName(); aInfo.applicationInfo.uid = mUid; + if (DEFAULT_PROCESS_NAME.equals(mProcessName)) { + mProcessName += ++sProcNameSeq; + } aInfo.processName = mProcessName; aInfo.packageName = mComponent.getPackageName(); aInfo.name = mComponent.getClassName(); @@ -1173,16 +1177,11 @@ class WindowTestsBase extends SystemServiceTestsBase { if (mWpc != null) { wpc = mWpc; } else { - wpc = new WindowProcessController(mService, - aInfo.applicationInfo, mProcessName, mUid, - UserHandle.getUserId(mUid), mock(Object.class), - mock(WindowProcessListener.class)); - wpc.setThread(mock(IApplicationThread.class)); + final WindowProcessController p = mService.getProcessController(mProcessName, mUid); + wpc = p != null ? p : SystemServicesTestRule.addProcess( + mService, aInfo.applicationInfo, mProcessName, 0 /* pid */); } - wpc.setThread(mock(IApplicationThread.class)); activity.setProcess(wpc); - doReturn(wpc).when(mService).getProcessController( - activity.processName, activity.info.applicationInfo.uid); // Resume top activities to make sure all other signals in the system are connected. mService.mRootWindowContainer.resumeFocusedTasksTopActivities(); diff --git a/telephony/java/android/telephony/AccessNetworkConstants.java b/telephony/java/android/telephony/AccessNetworkConstants.java index 4469ffc14447..7eec86a40c13 100644 --- a/telephony/java/android/telephony/AccessNetworkConstants.java +++ b/telephony/java/android/telephony/AccessNetworkConstants.java @@ -115,15 +115,15 @@ public final class AccessNetworkConstants { /** @hide */ public static @RadioAccessNetworkType int fromString(@NonNull String str) { switch (str.toUpperCase()) { - case "GERAN" : return GERAN; - case "UTRAN" : return UTRAN; - case "EUTRAN" : return EUTRAN; - case "CDMA2000" : return CDMA2000; - case "IWLAN" : return IWLAN; - case "NGRAN" : return NGRAN; + case "UNKNOWN": return UNKNOWN; + case "GERAN": return GERAN; + case "UTRAN": return UTRAN; + case "EUTRAN": return EUTRAN; + case "CDMA2000": return CDMA2000; + case "IWLAN": return IWLAN; + case "NGRAN": return NGRAN; default: - Rlog.e(TAG, "Invalid access network type " + str); - return UNKNOWN; + throw new IllegalArgumentException("Invalid access network type " + str); } } } diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 70fe6b10ef20..e032f65f3427 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -8550,6 +8550,13 @@ public class CarrierConfigManager { * IWLAN handover rules that determine whether handover is allowed or disallowed between * cellular and IWLAN. * + * Rule syntax: "source=[GERAN|UTRAN|EUTRAN|NGRAN|IWLAN|UNKNOWN], target=[GERAN|UTRAN|EUTRAN + * |NGRAN|IWLAN], type=[allowed|disallowed], roaming=[true|false], capabilities=[INTERNET|MMS + * |FOTA|IMS|CBS|SUPL|EIMS|XCAP|DUN]" + * + * Note that UNKNOWN can be only specified in the source access network and can be only used + * in the disallowed rule. + * * The handover rules will be matched in the order. Here are some sample rules. * <string-array name="iwlan_handover_rules" num="5"> * <!-- Handover from IWLAN to 2G/3G is not allowed --> diff --git a/telephony/java/android/telephony/DataFailCause.java b/telephony/java/android/telephony/DataFailCause.java index ac1f376cf6b5..e882b259f45e 100644 --- a/telephony/java/android/telephony/DataFailCause.java +++ b/telephony/java/android/telephony/DataFailCause.java @@ -125,6 +125,12 @@ public final class DataFailCause { public static final int UNSUPPORTED_QCI_VALUE = 0x3B; /** Procedure requested by the UE was rejected because the bearer handling is not supported. */ public static final int BEARER_HANDLING_NOT_SUPPORTED = 0x3C; + /** + * This cause is used to report a service or option not available event only when no other + * cause in the service or option not available class applies. + * @hide // TODO: Unhide in U. + */ + public static final int SERVICE_OR_OPTION_NOT_AVAILABLE = 0x3F; /** Max number of Packet Data Protocol (PDP) context reached. */ public static final int ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED = 0x41; /** Unsupported APN in current public land mobile network (PLMN). */ @@ -1135,6 +1141,7 @@ public final class DataFailCause { sFailCauseMap.put(ONLY_NON_IP_ALLOWED, "ONLY_NON_IP_ALLOWED"); sFailCauseMap.put(UNSUPPORTED_QCI_VALUE, "UNSUPPORTED_QCI_VALUE"); sFailCauseMap.put(BEARER_HANDLING_NOT_SUPPORTED, "BEARER_HANDLING_NOT_SUPPORTED"); + sFailCauseMap.put(SERVICE_OR_OPTION_NOT_AVAILABLE, "SERVICE_OR_OPTION_NOT_AVAILABLE"); sFailCauseMap.put(ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED, "ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED"); sFailCauseMap.put(UNSUPPORTED_APN_IN_CURRENT_PLMN, diff --git a/telephony/java/android/telephony/NetworkRegistrationInfo.java b/telephony/java/android/telephony/NetworkRegistrationInfo.java index c701e443a426..1d6798b7fc6e 100644 --- a/telephony/java/android/telephony/NetworkRegistrationInfo.java +++ b/telephony/java/android/telephony/NetworkRegistrationInfo.java @@ -183,8 +183,17 @@ public final class NetworkRegistrationInfo implements Parcelable { @TransportType private final int mTransportType; + /** + * The initial registration state + */ + @RegistrationState + private final int mInitialRegistrationState; + + /** + * The registration state that might have been overridden by config + */ @RegistrationState - private final int mRegistrationState; + private int mRegistrationState; /** * Save the {@link ServiceState.RoamingType roaming type}. it can be overridden roaming type @@ -255,6 +264,7 @@ public final class NetworkRegistrationInfo implements Parcelable { mDomain = domain; mTransportType = transportType; mRegistrationState = registrationState; + mInitialRegistrationState = registrationState; mRoamingType = (registrationState == REGISTRATION_STATE_ROAMING) ? ServiceState.ROAMING_TYPE_UNKNOWN : ServiceState.ROAMING_TYPE_NOT_ROAMING; setAccessNetworkTechnology(accessNetworkTechnology); @@ -310,6 +320,7 @@ public final class NetworkRegistrationInfo implements Parcelable { mDomain = source.readInt(); mTransportType = source.readInt(); mRegistrationState = source.readInt(); + mInitialRegistrationState = source.readInt(); mRoamingType = source.readInt(); mAccessNetworkTechnology = source.readInt(); mRejectCause = source.readInt(); @@ -336,6 +347,7 @@ public final class NetworkRegistrationInfo implements Parcelable { mDomain = nri.mDomain; mTransportType = nri.mTransportType; mRegistrationState = nri.mRegistrationState; + mInitialRegistrationState = nri.mInitialRegistrationState; mRoamingType = nri.mRoamingType; mAccessNetworkTechnology = nri.mAccessNetworkTechnology; mIsUsingCarrierAggregation = nri.mIsUsingCarrierAggregation; @@ -398,6 +410,15 @@ public final class NetworkRegistrationInfo implements Parcelable { } /** + * @return The initial registration state. + * + * @hide + */ + public @RegistrationState int getInitialRegistrationState() { + return mInitialRegistrationState; + } + + /** * @return {@code true} if registered on roaming or home network, {@code false} otherwise. */ public boolean isRegistered() { @@ -451,6 +472,17 @@ public final class NetworkRegistrationInfo implements Parcelable { */ public void setRoamingType(@ServiceState.RoamingType int roamingType) { mRoamingType = roamingType; + + // make sure mRegistrationState to be consistent in case of any roaming type override + if (isRoaming()) { + if (mRegistrationState == REGISTRATION_STATE_HOME) { + mRegistrationState = REGISTRATION_STATE_ROAMING; + } + } else { + if (mRegistrationState == REGISTRATION_STATE_ROAMING) { + mRegistrationState = REGISTRATION_STATE_HOME; + } + } } /** @@ -634,6 +666,8 @@ public final class NetworkRegistrationInfo implements Parcelable { .append(" transportType=").append( AccessNetworkConstants.transportTypeToString(mTransportType)) .append(" registrationState=").append(registrationStateToString(mRegistrationState)) + .append(" mInitialRegistrationState=") + .append(registrationStateToString(mInitialRegistrationState)) .append(" roamingType=").append(ServiceState.roamingTypeToString(mRoamingType)) .append(" accessNetworkTechnology=") .append(TelephonyManager.getNetworkTypeName(mAccessNetworkTechnology)) @@ -654,10 +688,10 @@ public final class NetworkRegistrationInfo implements Parcelable { @Override public int hashCode() { - return Objects.hash(mDomain, mTransportType, mRegistrationState, mRoamingType, - mAccessNetworkTechnology, mRejectCause, mEmergencyOnly, mAvailableServices, - mCellIdentity, mVoiceSpecificInfo, mDataSpecificInfo, mNrState, mRplmn, - mIsUsingCarrierAggregation); + return Objects.hash(mDomain, mTransportType, mRegistrationState, mInitialRegistrationState, + mRoamingType, mAccessNetworkTechnology, mRejectCause, mEmergencyOnly, + mAvailableServices, mCellIdentity, mVoiceSpecificInfo, mDataSpecificInfo, mNrState, + mRplmn, mIsUsingCarrierAggregation); } @Override @@ -672,6 +706,7 @@ public final class NetworkRegistrationInfo implements Parcelable { return mDomain == other.mDomain && mTransportType == other.mTransportType && mRegistrationState == other.mRegistrationState + && mInitialRegistrationState == other.mInitialRegistrationState && mRoamingType == other.mRoamingType && mAccessNetworkTechnology == other.mAccessNetworkTechnology && mRejectCause == other.mRejectCause @@ -694,6 +729,7 @@ public final class NetworkRegistrationInfo implements Parcelable { dest.writeInt(mDomain); dest.writeInt(mTransportType); dest.writeInt(mRegistrationState); + dest.writeInt(mInitialRegistrationState); dest.writeInt(mRoamingType); dest.writeInt(mAccessNetworkTechnology); dest.writeInt(mRejectCause); @@ -790,7 +826,7 @@ public final class NetworkRegistrationInfo implements Parcelable { private int mTransportType; @RegistrationState - private int mRegistrationState; + private int mInitialRegistrationState; @NetworkType private int mAccessNetworkTechnology; @@ -851,7 +887,7 @@ public final class NetworkRegistrationInfo implements Parcelable { * @return The same instance of the builder. */ public @NonNull Builder setRegistrationState(@RegistrationState int registrationState) { - mRegistrationState = registrationState; + mInitialRegistrationState = registrationState; return this; } @@ -970,7 +1006,7 @@ public final class NetworkRegistrationInfo implements Parcelable { */ @SystemApi public @NonNull NetworkRegistrationInfo build() { - return new NetworkRegistrationInfo(mDomain, mTransportType, mRegistrationState, + return new NetworkRegistrationInfo(mDomain, mTransportType, mInitialRegistrationState, mAccessNetworkTechnology, mRejectCause, mEmergencyOnly, mAvailableServices, mCellIdentity, mRplmn, mVoiceSpecificRegistrationInfo, mDataSpecificRegistrationInfo); |